2016-10-17 13 views
2

Ich bin neu in SQL, aber ich versuche, seine Logik zu lernen, nehme ich an, Bulk einfügen wird in allen Zeilen in diesem Fall ein Blob einfügen. (pdf-Datei) unten ist mein Code, aber was ich zu erreichen versuche, ist, eine pdf-Datei einzufügen, die ich auf SQL-Server in einer Reihe gesetzt habe, die einen passenden Primärschlüssel hat, den ich spezifiziere. Bisher fehlt mir die where-Klausel die PK angebenOpenrowset Bulk einfügen in einer bestimmten Zeile

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) 

Kann ich ein Update t-SQL-Abfrage anstelle des Einsatzes verwenden? und wie würde ich die wo, um eine bestimmte Zeile angeben, die ich in diesen Blob einfügen möchten fallen lassen? Jede Hilfe wäre willkommen.

Ich habe auch schon versucht, diese nach @ misterPositive Vorschlag für Update-Abfrage:

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) 

i Diese Nachricht tun empfangen: Entweder eine Formatdatei oder eine der drei Optionen SINGLE_BLOB, SINGLE_CLOB oder SINGLE_NCLOB muss sein angegeben. Ich mag diese Update-Abfrage, wie es scheint, was ich versuche zu tun.

+0

Verwendet dies SQL Server? –

Antwort

2

Sie können dies tun UPDATE:

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

Hier ist eine weitere Möglichkeit für PK

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

Nun sollte Bulk dann wie folgt aussehen:

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

Sie können das PK angeben, solange es keine Identität ist. Zumindest habe ich 2014 keine anderen Versionen getestet. –

+0

Danke MisterPositive! Ich glaube, dass für mich gearbeitet hat, ich sehe eine lange Reihe von Charakteren, die ich versuchen werde, es zu finden und das Dokument zu sehen. aber ich werde einige Nachforschungen anstellen und ein paar Fragen beantworten müssen, danke! – Edgar

0

Wenn Sie möchten, Fügen Sie neue Datensätze ein, dann könnten Sie eine Identitätsspalte für Ihren PK haben und sich nicht darum kümmern. Ich habe auch Funktionen gesehen, die verwendet werden, wenn eine Tabelle ohne Identität auf PK entworfen wird. So etwas wie GetTableNamePK() in der Auswahlliste.

Wenn Sie einen vorhandenen Datensatz aktualisieren möchten, benötigen Sie eine where-Klausel, wie Sie bereits erwähnt haben. Dieser arbeitete für mich bei der Prüfung:

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

Wenn Sie nicht möchten, dass die Identität verwenden oder die Funktion dieser gearbeitet, wo ID ein Primärschlüssel ist, und ich möchte das BLOB mit PK von 3 einzufügen:

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