كيفية إدراج النقطة إلى قاعدة بيانات باستخدام SQL Server إدارة Studio

StackOverflow https://stackoverflow.com/questions/1643627

سؤال

وكيف يمكنني بسهولة اضافة الى وجود سائل في حقل varbinary(MAX)؟

وكمثال على ذلك:

وشيء أريد أن أدخل هو: C: \ picture.png
الجدول هو mytable
العمود mypictureblob
المكان recid = 1

هل كانت مفيدة؟

المحلول

ويمكنك إدراج في (حد أقصى) حقل ثنائي متغير باستخدام T-SQL في SQL Server إدارة Studio وعلى وجه الخصوص باستخدام commmand OPENROWSET.

وعلى سبيل المثال:

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

ونلقي نظرة على الوثائق التالية لحسن سبيل المثال / تجول

العمل مع أنواع قيمة كبيرة

لاحظ أن مسار الملف في هذه الحالة هو نسبة إلى خادم SQL المستهدفة وليس العميل الخاص بك تشغيل هذا الأمر.

نصائح أخرى

وMSDN مقالا العمل مع أنواع قيمة كبيرة ،  الذي يحاول شرح كيفية عمل أجزاء الاستيراد، لكن يمكن الحصول على مربكا بعض الشيء لأنه يفعل أشياء 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) AS X

وسوف تظهر، أن النتيجة تبدو مثل جدول مع عمود واحد اسمه BulkColumn. هذا هو السبب الذي يمكن استخدامه في INSERT مثل:

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

والباقي هو مجرد تركيب ذلك إلى إدراج مع المزيد من الأعمدة، والتي قد تكون أو لا تكون الجدول الخاص بك. إذا قمت بتسمية نتيجة لذلك select FOO ثم يمكنك استخدام SELECT Foo.BulkColumn وas بعد أن ثوابت لحقول أخرى في الجدول الخاص بك.

والجزء الذي يمكن الحصول على أكثر صعبة هو كيفية تصدير تلك البيانات مرة أخرى إلى الملف بحيث يمكنك التحقق من أنه لا يزال موافق. إذا قمت بتشغيل على خط كمد:

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

وانها سوف تبدأ الأنين لمدة 4 "بارامس" إضافية، وسوف تعطي افتراضات مضللة (الأمر الذي سيؤدي في ملف متغير). يمكنك قبول أول واحد، تعيين 2 إلى 0 ثم assept 3 و 4، أو أن يكون واضحا:

<اقتباس فقرة>   

وأدخل نوع تخزين ملف بيانات الحقل [ثنائي متغير (حد أقصى)]:
     أدخل بادئة طول من البيانات [8] الملعب: 0
     أدخل طول بيانات حقل [0]:
     إدخال فاصل حقل [أي]:

وبعد ذلك سوف نسأل:

<اقتباس فقرة>   

هل تريد حفظ هذه المعلومات تنسيق في ملف؟ [Y / N] ص
     المضيف اسم [bcp.fmt]: C: \ الاختبار \ bcp_2.fmt

وفي المرة القادمة لديك لتشغيله إضافة -f C:\Test\bcp_2.fmt وانها ستتوقف عن الأنين :-) يوفر الكثير من الوقت والحزن.

وهناك طريقتان لتحديد BLOB مع TSQL:

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

وكذلك:

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

لاحظ اسم الارتباط بعد عبارة FROM، وهو إلزامي.

ويمكنك بعد ذلك هذا لادخال عن طريق القيام على INSERT SELECT.

ويمكنك أيضا استخدام النسخة الثانية للقيام UPDATE كما وصفت في <لأ href = "https://stackoverflow.com/questions/11820971/how-to-update-a-blob-in-sql-server التي تستخدم و-TSQL / 11820972 # 11820972 "> كيفية تحديث BLOB في SQL Server باستخدام TSQL .

ولكن يمكنك ببساطة قراءة ملف من القرص على جهاز خادم SQL:

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

ولرؤيتها في تطبيق إدارة في شكل عرافة (إدارة Studio).

وهكذا، يمكنك، على سبيل المثال، قاعدة بيانات النسخ الاحتياطي لملف (محليا على الخادم) ومن ثم تحميله إلى مكان آخر من البيان أعلاه.

هل تحتاج إلى القيام بذلك من استوديو MGMT؟ وهنا كيف لنا أن نفعل ذلك من خط كمد:

و"C: ملفات \ برنامج \ مايكروسوفت SQL خادم \ MSSQL \ BINN \ TEXTCOPY.exe" / S <خادم> / D <قاعدة البيانات> / T mytable / C mypictureblob / F "C: \ picture.png" / W "حيث RecId =" / I

وطيب ... وهذا استغرق مني الطريق طويل جدا. أداة إدارة مزود الاستوديو هو مجرد لا ترقى إلى أشياء بسيطة مثل هذا (أي أنا قد لاحظت قبل عندما تبحث عن مكان لتعيين مهلة على الاستفسارات، وكان عمله في 4 مواقع مختلفة)

وأنا تحميل بعض الآخر لغة الاستعلامات البنيويه حزمة محرر (المايسترو SQL في حالتي). ولمح أنه يتضمن محرر سائل حيث يمكنك أن تبحث في النقط، وتحميل النقط جديدة في هذه المجال.

وشكرا للمساهمة!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top