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属性?
如果已使用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)