2010-04-08 2 views
0

Filestream 기능을 추가하기 위해 데이터베이스를 업데이트하는 스크립트를 작성하고 있습니다. 스크립트는 오류없이 여러 번 실행할 수 있어야합니다. 이것은 내가 현재 가지고있는 것입니다테이블 변경 Alert가 false 인 경우에도 Filestream이 실행됩니다.

IF ((select count(*) from sys.columns a 
     inner join sys.objects b on a.object_id = b.object_id 
     inner join sys.default_constraints c on c.parent_object_id = a.object_id 
     where a.name = 'evidence_data' and b.name='evidence' 
      and c.name='DF__evidence_evidence_data') = 0) 

begin 

ALTER TABLE evidence SET (FILESTREAM_ON = AnalysisFSGroup) 
ALTER TABLE evidence ALTER COLUMN id ADD ROWGUIDCOL; 

end 

GO 

데이터베이스에 대해 이것을 처음 실행할 때 제대로 작동합니다. 두 번째로 if 문을 false로 설정하면 '증거'에 FILESTREAM 파일 그룹 또는 파티션 구성표가 있으므로 FILESTREAM 파일 그룹 또는 파티션 구성표를 추가 할 수 없습니다. "라는 오류가 발생합니다. if 문에 간단한 select를 넣고 alter table filestream을 꺼내면 올바르게 작동하고 if 문을 수행하지 않습니다. 따라서 if 문이 false 인 경우에도 명령문에서 항상 alter table filestream을 항상 실행합니다.

어떤 의견이나 제안이라도 좋을 것입니다. 감사.

+0

있습니까? 그 중 하나라도 잘못되면 항상 ALTER가 실행됩니다 (특히 DF__ 제약 이름이 의심 스럽습니다). – RBarryYoung

+0

예. 확실합니다. IF 문에서 select를 실행하면 자체, 1의 정확한 결과를 리턴합니다. 고마워요. – Allison

답변

0

세부 정보를 알지 못하는 경우 비즈니스 논리에 대한 이유는 어렵지만, 정의 된 파일 스트림 데이터 공간이없는 테이블 만 변경하려는 경우 다음 쿼리를 기반으로 조건을 고려하십시오. 주어진 테이블의 NULL을 반환, 그것은 파일 스트림 데이터 공간 (파일 그룹 또는 파티션 구성표가) 정의되지 않음을 의미합니다 : 당신은 당신이 IF 올바른에 모든 이름의 철자를 가지고 있는지 확인

select filestream_data_space_id from sys.tables

+0

나는 이것을 시도했지만 여전히 같은 문제가있다. SQL이 true 또는 false인지 여부에 관계없이 alter 문을 실행하고 실패합니다. 쿼리에서 간단한 select를 실행하면 올바르게 작동하지만 alter 문을 넣 자마자 alter 문을 실행하는 데 실패합니다. – Allison

+0

정도로 IF ([filestream_data_space_id] [분석]. [SYS]에서 선택. NAME = "증거 '여기서 [테이블]) NULL IS 이 제외한 선택 * analysis.dbo.evidence 단부 에서이 않는 것도 시작하지 IF (선택 [filestream_data_space_id] FROM [분석]. [sys]. [테이블] 이름 = '증거') IS NULL 시작 . – Allison