即使IF语句为false,也会运行表文件流

时间:2010-04-08 20:22:37

标签: sql sql-server-2008 filestream

我正在编写一个脚本来更新数据库以添加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文件组或分区方案。”如果我将一个简单的select放入if语句并在线上取出alter table filestream,它就能正常运行并且不执行if语句。因此,即使if语句为false,它总是在语句上运行alter table filestream。

任何想法或建议都会很棒。感谢。

1 个答案:

答案 0 :(得分:0)

在不知道细节的情况下很难推断出您的业务逻辑,但我想说如果您只想更改没有定义文件流数据空间的表,请考虑基于以下查询的条件(如果它返回给定表为NULL,表示未定义文件流数据空间(文件组或分区方案):

select filestream_data_space_id from sys.tables