2016-09-15 4 views
1

Dies ist ein Beispiel Code von dem, was ich erreichen möchte, möchte ich eine Spalte mit bestimmten Code-Variablen zu einer Tabelle hinzufügen. Allerdings kann ich nicht wirklich verstehen, wie die sp_executesql es durchläuft. Jede Hilfe willkommensp_executesql: Spalte mit case-Anweisung hinzufügen

DECLARE @SQLQUERY NVARCHAR (max) 
DECLARE @Table VARCHAR (200) = 'Table_Name' 
DECLARE @Column VARCHAR (200) = 'Column_Name' 

DECLARE @Code1 int = 1 
DECLARE @Code2 int = 2 
DECLARE @Code3 int = 3 

SET @SQLQUERY = 'ALTER TABLE' + @Table + 'ADD' @Column 
AS CASE WHEN FirstColumn IS NULL THEN @Code1 
     WHEN SecondColumn IS NULL THEN @Code2 
    ELSE @Code3 

Exec sp_executesql @SQLQUERY 
+0

Was genau Sie erreichen wollen? Hinzufügen einer berechneten Spalte zu Ihrer Tabelle? – ZLK

Antwort

0

müssen Sie die alter Anweisung alle als String bauen und sie dann ausführen, zum Beispiel Ihre Abfrage wie folgt sein sollte:

SET @SQLQUERY = 'ALTER TABLE ' + @Table + ' ADD ' + @Column + 
' AS CASE WHEN FirstColumn IS NULL THEN ' + str(@Code1) + 
     ' WHEN SecondColumn IS NULL THEN ' + str(@Code2) + 
    ' ELSE ' + str(@Code3) + ' END' 

Hinweis: I verwendet str(@Code1), da es erklärt, wie wurde int

dann können Sie die Anweisung normalerweise

ausführen
Exec sp_executesql @SQLQUERY 

Hoffnung dieser Ihnen

+0

Hallo, jetzt gab es mir den Fehler unbekannt Objekttyp 'TABLEtable_nameADDColumn_Name' verwendet in einer create, drop oder alter-Anweisung. Irgendein Hinweis, was das sein könnte? – user3052850

+0

Sie sollten den richtigen Tabellennamen eingeben und ich werde auch die Antwort bearbeiten, um Leerzeichen vor dem _ADD_ – Monah

+0

hinzuzufügen Ich aktualisierte die Antwort durch Hinzufügen der richtigen Abstand, aber Sie müssen den richtigen Tabellenname verwenden, der – Monah

0

einen Blick auf sp_executesql

Sie benötigen Hilfe bei der Abfrage als String zu bauen.

ich bemerkt habe einige Probleme auf Anfrage:

  • Firstcolumn und SecondColumn nicht Spalte erklärt
  • Wenn Sie neue Spalte hinzufügen möchten, müssen Sie den Datentyp für die Spalte angeben. siehe this

    ALTER TABLE Tabellenspalte ALTER COLUMN NewColumn NVARCHAR (20) NOT NULL;

für die Bedingungen für @ Code1, @ Code2 und @ Code3. Sie möchten dies als Standardwerte? Was versuchst du zu erreichen?

+0

Es wird eine berechnete Spalte sein , die abhängig von der Bedingung einen bestimmten Code erhalten. Die Codes werden dynamisch sein, das wird sich später ändern. Ich möchte jedoch nur den ersten Teil zum Laufen bringen. – user3052850

0

Das Skript arbeitete schließlich entsprechend dazu:

DECLARE @Code1 int = 1 
DECLARE @Code2 int = 2 
DECLARE @Code3 int = 3 
DECLARE @SQLQUERY NVARCHAR (max) 

SET @SQLQUERY = N'ALTER TABLE Table ADD Column 
AS CASE WHEN FirstColumn IS NULL THEN' STR(@Code1) + 
    'WHEN SecondColumn IS NULL THEN' STR(@Code2) + 
' ELSE' str(@Code3) + ' END' 

Exec sp_executesql @SQLQUERY