【发布时间】:2014-11-11 04:13:35
【问题描述】:
在我的情况下,脚本可能会运行多次(不要问为什么)。
所以我想在我的脚本在 prod 中运行之前对其进行防弹。
我在添加 FILESTREAM 功能的地方做了很大的改变。通过启用 FILESTREAM,更改数据库以添加文件流文件组,然后将文件位置添加到该文件组,最后在数据上创建带有文件流的表,我已经让它在我的开发环境中使用必要的脚本列(varbinary(MAX))。
这一切都很好。但是,如果文件组已经存在,则多次运行 ALTER DATABASE 脚本会产生错误。所以我这样做了......
IF NOT EXISTS (SELECT * FROM sys.filegroups WHERE [name]='NewFileGroup')
BEGIN
ALTER DATABASE [MyDb]
ADD FILEGROUP [NewFileGroup] CONTAINS FILESTREAM
END
GO
但代码的下一部分是我不想运行多次的部分......
DECLARE @Path NVARCHAR(MAX)
SET @Path = (SELECT REPLACE(filename, 'MyDb.mdf', 'NewFileGroup') FROM sysfiles WHERE Name = 'PrimaryFileName')
DECLARE @SQL NVARCHAR(max)
SET @SQL =
'ALTER DATABASE [MyDb]
ADD FILE
(NAME = ''NewFileGroup''
, FILENAME = ' + QuoteName( @Path, '''' )
+ ')
TO FILEGROUP [NewFileGroup]'
EXEC(@SQL)
该代码工作正常,但我如何检查该文件组中是否已存在 FILENAME / 文件路径?请有人帮忙。我只想围绕它再做一个 if 语句。
【问题讨论】:
标签: sql tsql sql-server-2008 sql-server-2008-r2