2011-07-19 11 views
6

मैं एक स्तंभ FILESTREAM विशेषता लागू किया, इस तरह है कि के साथ एक मेज बना लिया है:SSMS दिखाई नहीं दे रहा या पटकथा 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 सर्वर प्रबंधन स्टूडियो सहयोग नहीं करता था। गुण कॉलम गुण फलक में प्रकट नहीं होता है, और जब मैंने तालिका को स्क्रिप्ट किया है, तो FILESTREAM विशेषता प्रकट नहीं होती है।

अद्यतन: एक और विषमता यह है कि मेरी फ़ाइलस्टॉरेज तालिका कभी भी एसएसएमएस इंटेलिजेंस द्वारा प्रस्तुत तालिकाओं की सूची में प्रकट नहीं होती है।

क्या सौदा है? मैं एसएसएमएस में FILESTREAM विशेषता का उपयोग कैसे कर सकता हूं या सत्यापित कर सकता हूं?

उत्तर

9

यदि आपने अपनी तालिका को संशोधित करने के लिए एसएसएमएस टेबल डिज़ाइनर का उपयोग किया है, तो आपके कॉलम का 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

माइक्रोसॉफ्ट ने स्वीकार किया कि SSMS FILESTREAM विशेषता जब एक मेज SSMS तालिका डिजाइनर के माध्यम से बदल गया है खो देता है: FILESTREAM settings are lost after changing field size through SSMS 2012/06/07 के रूप में

उसे ठीक किया और शामिल किया जाना निर्धारित है यहाँ एक नमूना है "आगामी रिलीज़" ...

+1

में पता नहीं कौन-सा संस्करण अद्यतन शामिल है, लेकिन मेरी SSMS संस्करण वर्तमान में 10.50.4000.0 है और SSMS अब परिवर्तन लिपियों कि 'FILESTREAM' शामिल उत्पन्न करता है। तो ऐसा लगता है कि माइक्रोसॉफ्ट ** ने ** एसक्यूएल सर्वर 2008 आर 2 के लिए अद्यतन जारी किया है। –

संबंधित मुद्दे