2011-07-19 31 views
6

tôi đã tạo ra một bảng với một cột có thuộc tính FileStream áp dụng, như thế này:SSMS không hiển thị hoặc kịch bản FileStream thuộc tính

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

Trong một thủ tục lưu trữ, tôi đang tham khảo các chức năng PathName() rằng nên có sẵn cho các Data cột trên:

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 

Tuy nhiên, khi tôi thực thi kịch bản ở trên để tạo ra các thủ tục lưu trữ, SSMS in một lỗi: "Chức năng PathName chỉ có giá trị trên các cột với các thuộc tính FileStream . ". Tôi chắc chắn đã tạo ra bảng với thuộc tính FILESTREAM được bật (và hỗ trợ filestream được kích hoạt trong DB), và thậm chí tôi đã thêm một tệp vào bảng.

Khi tôi cố gắng xác minh rằng cột thực sự là cột FILESTREAM, SQL Server Management Studio đã không hợp tác. Thuộc tính không xuất hiện trong ngăn thuộc tính cột và khi tôi viết bảng ra, thuộc tính FILESTREAM không xuất hiện.

Cập nhật: một điều kỳ lạ nữa là bảng FileStorage của tôi không bao giờ xuất hiện trong danh sách các bảng được trình bày bởi SSMS intellisense.

Thỏa thuận là gì? Làm thế nào tôi có thể thao tác hoặc xác minh thuộc tính FILESTREAM trong SSMS?

Trả lời

9

Nếu bạn đã sử dụng SSMS Table Designer để sửa đổi bảng của bạn, thuộc tính FILESTREAM của cột của bạn sẽ bị mất. Trong trường hợp đó, bạn cần phải tạo lại cột và sao chép dữ liệu hiện có vào cột đó. đây là một ví dụ:

/* 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

Microsoft thừa nhận rằng SSMS mất thuộc tính FILESTREAM khi một bảng được thay đổi thông qua bảng thiết kế SSMS: FILESTREAM settings are lost after changing field size through SSMS

Tính đến 2012/06/07 nó là cố định và dự kiến ​​sẽ được bao gồm trong "bản phát hành sắp tới" ...

+1

Tôi không biết phiên bản nào đã bao gồm bản cập nhật, nhưng phiên bản SSMS của tôi hiện là 10.50.4000.0 và SSMS hiện tạo tập lệnh thay đổi bao gồm 'FILESTREAM'. Vì vậy, nó trông giống như Microsoft ** đã ** phát hành bản cập nhật cho SQL Server 2008 R2. –

Các vấn đề liên quan