2016-10-17 5 views
2

私はSQLを初めて使っていますが、そのロジックを知ろうとしています。この場合、大量挿入がすべての行に挿入されると仮定しています。 (pdfファイル)は私のコードですが、私が達成しようとしているのは、私が指定した一致する主キーを持つ行にSQLサーバーを置いたpdfファイルを挿入することです。これまでのところwhere句を指定してPKを指定していません特定の行のOpenrowset一括挿入

Declare @sql varchar(max) 
    Declare @filePath varchar(max) 
    Set @filePath = 'C:\iphone.pdf' 
    Set @sql='INSERT INTO HDData.dbo.PurchasedCellPhoneInfo(Receipt) SELECT * FROM OPENROWSET(BULK '''+ @filePath+''', SINGLE_BLOB) AS BLOB' 
    exec(@sql) 

insertではなくt-SQLクエリを使用できますか?どのように私はこのBLOBを挿入する特定の行を指定するためにどこにドロップするだろうか? ご協力いただければ幸いです。

私も更新クエリのためにmisterPositiveの提案@以下、これを試してみました:

Declare @criteria varchar(50) 
SET @criteria ='352014075399147' 
UPDATE HDData.dbo.PurchasedCellPhoneInfo SET Receipt = 
(SELECT Receipt FROM OPENROWSET (BULK 'C:\352014075399147.pdf, SINGLE_BLOB') a) 
WHERE(IMEI = @criteria) 

私はこのメッセージを受け取る行います。フォーマットファイルまたは3つのオプションのSINGLE_BLOBの1、SINGLE_CLOB、またはSINGLE_NCLOBのどちらかでなければなりません 指定された。私は何をしようとしているように見えるので、この更新クエリが好きです。

+0

これはSQL Serverを使用していますか? –

答えて

2

あなたは更新するには、この操作を行うことができます。あなたがしたい場合は

BULK INSERT [dbo].[VWWorkDataLoad] FROM 'D:\NPfiles\TS082114.trn' 
WITH (FIRSTROW = 2,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n'); 
+1

IDが同一でない限り、PKを指定できます。少なくとも2014年に、私は他のバージョンをテストしていません。 –

+0

ありがとうMisterPositive!私はそれが私のために働いたと信じています。私は文字の長い文字列を参照してください私はそれを取得し、ドキュメントを参照しようとします。しかし、私はいくつかの研究を行い、いくつかのクエリ、おかげで周囲を混乱させる必要があります! – Edgar

0

UPDATE MyTable 
SET blobField = 
    (SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a) 
WHERE (CriteriaField = @criteria) 
ここ

BULK INSERTは、のようになります。今PK

CREATE VIEW [dbo].[VWWorkDataLoad] 
AS 
SELECT RecordLine 
FROM [dbo].[WorkDataLoad]; 

ための別の方法です新しいレコードを挿入すると、PKのID列を持つことができ、それを心配する必要はありません。私はまた、PKがIDなしでテーブルが設計されているときに使用される関数を見てきました。選択リストでGetTableNamePK()のようなもの。

既存のレコードを更新する場合は、前述のようにwhere句が必要です。これは、テストで私の仕事:

Update TestBlob Set BinaryData = (SELECT * FROM OPENROWSET(BULK 'c:\temp\test.pdf', SINGLE_BLOB) AS BLOB) 
    Where ID = 2 

をあなたはアイデンティティを使用するか、これを機能させたくない場合はIDが主キーであると私は3のPKでBLOBを挿入する場所を働いた:

INSERT INTO TestBlob2 (ID, BinaryData) SELECT 3, * FROM OPENROWSET(BULK 'c:\temp\test.pdf', SINGLE_BLOB) AS BLOB