【问题标题】:SSMS not showing or scripting FILESTREAM attributeSSMS 未显示或编写脚本 FILESTREAM 属性
【发布时间】:2011-07-19 15:23:38
【问题描述】:

我创建了一个表,其中有一列应用了 FILESTREAM 属性,如下所示:

CREATE TABLE dbo.FileStorage
(
    [ID] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
    [Filename] [nvarchar](255) NOT NULL,
    [Data] [varbinary](max) FILESTREAM NULL
)
GO

在存储过程中,我引用了PathName() 函数,该函数应该可用于上面的Data 列:

CREATE PROCEDURE GetPathName
    -- Add the parameters for the stored procedure here
    @fileId uniqueidentifier,
    @filePath nvarchar(max) output
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT @filePath = Data.PathName()
    FROM dbo.FileStorage
    WHERE ID = @fileId      
END
GO

但是,当我执行上述脚本来创建存储过程时,SSMS 会打印错误:“函数路径名仅对具有 FILESTREAM 属性的列有效。”。我当然在打开 FILESTREAM 属性的情况下创建了表(并且在 DB 中启用了文件流支持),我什至在表中添加了一个文件。

当我尝试验证该列确实是 FILESTREAM 列时,SQL Server Management Studio 没有配合。该属性没有出现在列属性窗格中,当我编写表格脚本时,FILESTREAM 属性没有出现。

更新:另一个奇怪的是,我的 FileStorage 表从未出现在 SSMS intellisense 提供的表列表中。

有什么关系?如何操作或验证 SSMS 中的 FILESTREAM 属性?

【问题讨论】:

    标签: sql-server-2008 filestream ssms


    【解决方案1】:

    如果您使用 SSMS 表设计器修改您的表,您的列的 FILESTREAM 属性将丢失。在这种情况下,您需要重新创建列并将现有数据复制到其中。这是一个示例:

    /* rename the varbinary(max) column
    eg. FileData to xxFileData */
    sp_RENAME '<TableName>.<ColumnName>', 'xx<ColumnName>' , 'COLUMN'
    GO
    
    /* create a new varbinary(max) FILESTREAM column */
    ALTER TABLE <TableName>
    ADD <ColumnName> varbinary(max) FILESTREAM NULL
    GO
    
    /* move the contents of varbinary(max) column to varbinary(max) FILESTREAM column */
    UPDATE <TableName>
    SET <ColumnName> = xx<ColumnName>
    GO
    
    /* drop the xx<ColumnName> column */
    ALTER TABLE <TableName>
    DROP COLUMN xx<ColumnName>
    GO
    

    【讨论】:

      【解决方案2】:

      Microsoft 承认,当通过 SSMS 表设计器更改表时,SSMS 会丢失 FILESTREAM 属性:FILESTREAM settings are lost after changing field size through SSMS

      截至 2012 年 6 月 7 日,它已修复并计划包含在“即将发布的版本”中...

      【讨论】:

      • 我不知道更新包含哪个版本,但我的 SSMS 版本目前是 10.50.4000.0,SSMS 现在生成包含 FILESTREAM 的更改脚本。所以看起来微软已经发布了 SQL Server 2008 R2 的更新。
      猜你喜欢
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      相关资源
      最近更新 更多