Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 即使语句为false,Alter Table Filestream也会运行_Sql_Sql Server 2008_Filestream - Fatal编程技术网

Sql 即使语句为false,Alter Table Filestream也会运行

Sql 即使语句为false,Alter Table Filestream也会运行,sql,sql-server-2008,filestream,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 wh

我正在编写一个脚本来更新数据库以添加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语句。因此,本质上它总是运行ALTERTABLE filestream on语句,即使if语句为false


任何想法或建议都很好。谢谢。

< p>很难在不知道细节的情况下对您的业务逻辑进行推理,但我想说,如果您只想更改没有FielestRAMM数据空间定义的表,那么如果它为给定表返回null,则考虑以下查询的条件,这意味着未定义filestream数据空间文件组或分区方案:


从sys.tables中选择filestream\u data\u space\u id

如果正确,是否确定所有名称的拼写正确?如果其中任何一个错误,那么它将始终执行更改。我特别怀疑DF___;约束名称。是的。我敢肯定。如果我在If语句中单独运行select,它将返回正确的结果1。谢谢。我已经试过了,但仍然有同样的问题。不管sql是真是假,它都会运行alter语句并失败。如果我在查询中放入一个简单的select,它会正常工作,但只要我放入alter语句,它就无法运行alter语句。因此,如果从[analysis].[sys].[tables]中选择[filestream\u data\u space\u id],其中name='defective'为NULL,则从analysis.dbo.defective end开始选择*[analysis].[sys].[tables]中的[filestream\u data\u space\u id],其中name='defective'为NULL,begin ALTER TABLE证据集filestream\u ON=AnalysisFSGroup end errors,并表示文件流已打开。