繁体   English   中英

即使IF语句为假,Alter Table Filestream也会运行

[英]Alter Table Filestream runs even if IF statement is 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,它将引发错误消息“由于表'evidence'已经具有FILESTREAM文件组或分区方案,因此无法添加FILESTREAM文件组或分区方案。” 如果我在if语句中放入一个简单的select并在线取出alter table文件流,它将正常运行并且不会执行if语句。 因此,从本质上讲,即使if语句为false,它也始终在语句上运行alter table文件流。

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

在不知道细节的情况下很难推断出您的业务逻辑,但是我想说,如果您只想更改未定义文件流数据空间的表,请考虑以下查询的条件(如果对于给定表,这意味着未定义文件流数据空间(文件组或分区方案):

select filestream_data_space_id from sys.tables

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM