SSMS не показывает или сценарий FILESTREAM атрибут - PullRequest
6 голосов
/ 19 июля 2011

Я создал таблицу со столбцом, к которому применен атрибут 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 печатает ошибку: "Функция PathName действительна только для столбцов с атрибутом FILESTREAM. ".Я, конечно, создал таблицу с включенным атрибутом FILESTREAM (и поддержка файлового потока включена в БД), и я даже добавил файл в таблицу.

Когда я попытался проверить, что столбец действительностолбец FILESTREAM, SQL Server Management Studio не сотрудничал.Атрибут не отображается на панели свойств столбца, и когда я создавал таблицу, атрибут FILESTREAM не отображается.

Обновление : еще одна странность заключается в том, что моя таблица FileStorage неникогда не появляются в списке таблиц, представленных SSMS intellisense.

В чем же дело?Как я могу манипулировать или проверять атрибут FILESTREAM в SSMS?

Ответы [ 2 ]

9 голосов
/ 21 сентября 2011

Если вы использовали SSMS Table Designer для изменения таблицы, атрибут 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
3 голосов
/ 20 августа 2012

Microsoft признала, что SSMS теряет атрибут FILESTREAM при изменении таблицы через конструктор таблиц SSMS: Параметры FILESTREAM теряются после изменения размера поля через SSMS

По состоянию на 6 /7/2012 исправлено и планируется включить в " следующий выпуск " ...

...