2016-05-06 17 views
-3

Dies ist eine vereinfachte Version meines Problems. Ich habe 2 Tabellen untenSQL Server-Abfrage einfügen

ProductInformtaionType 

ProductInformationTypeID Name  isText isInteger isDecimal is Boolean 
1       barcode 1  0   0  0 
2       Vatable 0  0   0  1 
3       Quantity 0  1   0  0 

und

ProductInformtaion 

ProductInformtaion ProductID ProductInformtaionTypeID ValueText ValueInteger ValueDecimal 

, wenn ich einige Werte erhalte ich eine INSERT-Abfrage benötigen, die die Daten in der relavant Feld einfügen wird. zB Menge ist Ganzzahl, also muss ich das Produkt in die Produktinformationstabelle einfügen und nur das isIntegerfield

auffüllen Wie erstelle ich eine dynamische Einfügeabfrage, die das richtige Feld füllt, anstatt 4 separate Inserts für (istext, isInteger, isBoolean , isDecimal) mit dem where istext = 1-Klausel

+1

Also, was ist die eigentliche Frage hier? –

+1

Bitte googlen Sie und lernen Sie den INSERT-Befehl in SQL kennen. –

+0

INSERT mit einem SELECT. Schreiben Sie eine Auswahl, die die Spalte zurückgibt, die Sie für die Einfügung benötigen, verbinden Sie sie mit der Tabelle type und verwenden Sie CASE für Text-, Ganzzahl- und Dezimalspalten. Testen Sie die Abfrage, und lassen Sie sie ablaufen. Wählen Sie dann mit 'INSERT INTO YourTable (col1, col2, ...)' auswählen und fertig. –

Antwort

0

Dies wird funktionieren. Erstellen Sie eine gespeicherte Prozedur, die alle Parameter akzeptiert. Dann übergeben Sie einfach NULL-Werte. Zum Beispiel, um nur 'Column3' einsetzen, würden Sie rufen:

Exec dbo.[Test_Stored_Procedure] @Column3 = 'hey!!!' 

Alternativ können Sie tun:

Exec dbo.[Test_Stored_Procedure] @Column1 = null, @Column2 = null, @Column3 = 'hey!!!', @Column4 = null 

Hier ist die Stored Procedure Code:

CREATE PROCEDURE [dbo].[Test_Stored_Procedure] 
    @Column1 varchar(50) = null, 
    @Column2 varchar(50) = null, 
    @Column3 varchar(50) = null, 
    @Column4 varchar(50) = null 
AS 
BEGIN 
    INSERT INTO YourTable 
    VALUES 
    (@Column1, @Column2, @Column3, @Column4) 
END