2009-10-29 19 views
42

का उपयोग कर डेटाबेस में ब्लॉब कैसे सम्मिलित करें I varbinary (MAX) फ़ील्ड में आसानी से ब्लॉब कैसे डाल सकता हूं?एसक्यूएल सर्वर प्रबंधन स्टूडियो

तर्क खातिर

:

बात मैं सम्मिलित करना चाहते हैं मान है: c: \ picture.png तालिका mytable है स्तंभ mypictureblob है और जगह recid है = 1

मैं कुछ समय के लिए googling रहा है और मुझे एक आसान समाधान नहीं मिल रहा है

धन्यवाद!

उत्तर

56

आप SQL सर्वर प्रबंधन स्टूडियो के भीतर टी-एसक्यूएल का उपयोग करके और विशेष रूप से OPENROWSET कमांड का उपयोग करके एक varbinary (अधिकतम) फ़ील्ड में डाल सकते हैं।

उदाहरण के लिए:

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath 
) 
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif' 
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto 

एक अच्छा उदाहरण के लिए निम्नलिखित दस्तावेज़ पर एक नजर डालें/पूर्वाभ्यास

Working With Large Value Types

ध्यान दें कि इस मामले में फ़ाइल पथ लक्षित एसक्यूएल के सापेक्ष है सर्वर और नहीं, आपका क्लाइंट इस कमांड को चला रहा है।

+0

टीएसक्यूएल शीर्ष टूलबार पर 'नई क्वेरी' बटन के साथ सही है? – Toad

+0

टी-एसक्यूएल क्वेरी भाषा है जो SQL सर्वर उपयोग करता है। हां, आपको एक नई क्वेरी बनाने की आवश्यकता होगी ...... –

+0

धन्यवाद! यह एक भंवर – Toad

1

क्या आपको इसे एमजीएमटी स्टूडियो से करने की ज़रूरत है?

"C: \ Program Files \ Microsoft SQL सर्वर \ MSSQL \ Binn \ TEXTCOPY.exe"/एस < सर्वर>/डी < डाटाबेस>/टी mytable/सी mypictureblob/एफ यहाँ कैसे हम cmd लाइन से यह करना है "सी: \ picture.png"/डब्ल्यू "जहां RecId ="/I

+0

euh से क्वेरी चला रहे हैं .... ठीक है ... लेकिन यह कैसे पता चलेगा कि कौन से डेटाबेस से कनेक्ट होना है? – Toad

+0

क्षमा करें, ऐसा लगता है कि मेरी कुछ टिप्पणियां धारीदार थीं।/एस विकल्प सर्वर है और/डी डेटाबेस – cagreen

+0

हाय धन्यवाद !, लेकिन पासवर्ड/उपयोगकर्ता नाम के बारे में क्या है? – Toad

0

ठीक है ... यह मुझे बहुत लंबा रास्ता ले गया। एसक्यूएल-प्रबंधन स्टूडियो टूल इस तरह की साधारण चीजों पर निर्भर नहीं है (जिसे मैंने प्रश्नों पर टाइमआउट सेट करने के लिए पहले देखा था, और यह 4 अलग-अलग स्थानों में किया गया था)

मैंने कुछ अन्य डाउनलोड किया एसक्यूएल संपादक पैकेज (मेरे मामले में एसक्यूएल मास्टरो)। और देखो इसमें एक ब्लॉब संपादक शामिल है जहां आप ब्लब्स देख सकते हैं, और इन क्षेत्रों में नए ब्लॉब्स लोड कर सकते हैं।

इनपुट के लिए धन्यवाद!

12

एमएसडीएन का एक लेख Working With Large Value Types है जो यह समझाने की कोशिश करता है कि आयात कैसे काम करता है लेकिन यह थोड़ा उलझन में पड़ सकता है क्योंकि यह 2 चीजें एक साथ करता है। तो यहां एक सरलीकृत संस्करण है और 2 भागों में टूटा हुआ है। सरल तालिका मान लें:

CREATE TABLE [Thumbnail](
    [Id]  [int] IDENTITY(1,1) NOT NULL, 
    [Data]  [varbinary](max) NULL 
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC 
)) ON [PRIMARY] 

आप (SSMS में) चलाते हैं:

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) 

यह है कि परिणाम BulkColumn नामित एक स्तंभ के साथ एक मेज की तरह दिखता है दिखाएगा।

INSERT [Thumbnail] (Data) 
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) 

बाकी सिर्फ अधिक स्तंभ जो अपनी मेज या हो सकता है कि साथ डालने में ढाले है: यही कारण है कि आप की तरह सम्मिलित में इसका इस्तेमाल कर सकते हैं। यदि आप फूड का चयन करने वाले परिणाम ओडी का नाम देते हैं तो आप अपनी तालिका में अन्य फ़ील्ड के लिए उस स्थिरांक के बाद SELECT Foo.BulkColumn और गधे का उपयोग कर सकते हैं।

जो पॉइंट अधिक मुश्किल हो सकता है वह है कि उस डेटा को एक फ़ाइल में वापस निर्यात करने के लिए कैसे करें ताकि आप यह जांच सकें कि यह अभी भी ठीक है। आप cmd लाइन पर चलाते हैं:

bcp "select Data from B2B.dbo.Thumbnail where Id=1" queryout D:\T\TestImage1_out2.dds -T -L 1 

यह 4 अतिरिक्त "पैरामीटर" के लिए शिकायत शुरू करने के लिए जा रहा है और भ्रामक चूक दे देंगे (परिवर्तित फ़ाइल में परिणाम होगा whihc)। आप पहले एक स्वीकार कर सकते हैं, 3 और 4 assept 0 2 सेट और फिर, या स्पष्ट होने के लिए:

Enter the file storage type of field Data [varbinary(max)]: 
Enter prefix-length of field Data [8]: 0 
Enter length of field Data [0]: 
Enter field terminator [none]: 

तो यह पूछना होगा:

Do you want to save this format information in a file? [Y/n] y 
Host filename [bcp.fmt]: C:\Test\bcp_2.fmt 

अगली बार जब आप इसे जोड़ने के चलाने के लिए है -एफ सी: \ टेस्ट \ bcp_2.fmt और यह चमकना बंद कर देगा :-) बहुत समय और दुःख बचाता है।

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a 

साथ ही:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a 

नोट FROM खंड के बाद सहसंबंध नाम है, जो अनिवार्य है

+0

+1 के साथ बहुत अधिक दिनांकित (लेकिन हमेशा प्रासंगिक) के लिए बहुत अच्छा प्रयास नहीं किया गया है। – Toad

+1

किसी को खंड से उपनाम निर्दिष्ट करने की आवश्यकता है –

5

वहाँ TSQL के साथ एक बूँद का चयन करने के दो तरीके हैं।

आप इसे INSERT चयन करके INSERT में कर सकते हैं।

आप How To Update A BLOB In SQL SERVER Using TSQL में वर्णित एक अद्यतन करने के लिए दूसरे संस्करण का भी उपयोग कर सकते हैं।

2

हालांकि आप बस एसक्यूएल सर्वर मशीन पर डिस्क से एक फ़ाइल पढ़ सकते हैं:

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a 

हेक्स प्रपत्र (प्रबंधन स्टूडियो) में प्रबंधन अनुप्रयोग में देखने के लिए।

तो, उदाहरण के लिए, आप फ़ाइल के लिए बैकअप डेटाबेस (स्थानीय रूप से सर्वर पर) कर सकते हैं और फिर उपरोक्त कथन द्वारा इसे अन्य स्थान पर डाउनलोड कर सकते हैं।

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