【问题标题】:SQL 2008 FILESTREAM - How to Check if DB Has Filestream Enabled Before Altering ItSQL 2008 FILESTREAM - 如何在更改之前检查 DB 是否启用了文件流
【发布时间】: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


    【解决方案1】:

    要查看您是否已有 FILESTREAM 的文件组,请查看 sys.data_spaces

    select * from sys.data_spaces where type='FD';
    

    要查看文件组是否有 FILESTREAM 的任何文件,请查看sys.database_files

    select * from sys.database_files where type = 2;
    

    无论你做什么,不要依赖对象名称

    【讨论】:

    • 如果我定义它们,为什么不依赖它们?
    • 如果您不确定文件组是否存在,那么您如何确定数据库是否启用了文件流? DBA 添加了一个为名为 foo 的 filstream 启用的文件组,您的应用程序出现并尝试添加自己的...
    • 我正在制作另一个团队(我的 IT 部门)将在数据库上运行的所有脚本......有时他们会乱序运行它们和/或运行它们多次......我是只是尝试检查以确保错误不会到处显示
    【解决方案2】:

    或从 SQL Server 2012 及更高版本开始,此查询将列出所有启用了非事务性访问的数据库,即 FileStream。

    SELECT DB_NAME(database_id) [DB_Name],directory_name [FileStream_DirectoryName]
        FROM  sys.database_filestream_options
        WHERE non_transacted_access != 0;    
    

    更多信息请参考http://msdn.microsoft.com/en-us/library/gg492071.aspx

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2012-04-28
      • 2012-08-22
      • 2015-10-22
      • 2020-11-16
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多