SSMS未显示或编写FILESTREAM属性脚本

Ben*_*ins 6 ssms filestream sql-server-2008

我创建了一个包含应用了FILESTREAM属性的列的表,如下所示:

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

在存储过程中,我引用了上面列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
Run Code Online (Sandbox Code Playgroud)

但是,当我执行上述脚本来创建存储过程时,SSMS会输出错误:"Function PathName仅对具有FILESTREAM属性的列有效." .我当然创建了打开FILESTREAM属性的表(并且在数据库中启用了文件流支持),我甚至在表中添加了一个文件.

当我尝试验证该列确实是FILESTREAM列时,SQL Server Management Studio不合作.该属性未显示在列属性窗格中,当我将表编写为脚本时,不会显示FILESTREAM属性.

更新:另一个奇怪的是我的FileStorage表不会出现在SSMS intellisense提供的表列表中.

这是怎么回事?如何操作或验证SSMS中的FILESTREAM属性?

Kar*_*llo 9

如果已使用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
Run Code Online (Sandbox Code Playgroud)