2016-10-10 3 views
-1

ich dieses SQL-Statement und kann den Fehler nichtFehler 156 in Tsql Sp_executesql

Execute sp_executesql 
N' UPDATE tblFI01_Auftraege 
SET @WerteListe 
WHERE Auftrag_id = @Auftrag_ID' 
,N'@WerteListe varchar(max), @Auftrag_ID int' 
,@WerteListe= N'Datum_geaendert = GetDate()', @Auftrag_ID = 12; 

Der Fehler finden, sagt:

Falsche Syntax in der Nähe von Schlüsselwort WHERE ich die Beschreibung gelesen habe von sp_executesql, aber kann den Fehler nicht finden.

Irgendwelche Hilfe?

+1

Sie nicht auf Tabellen- oder Spaltennamen überprüfen können, können so parametriert werden. –

+0

Ein weiterer Fall von _optimistischer Programmierung_. Sie hoffen, dass SQL Server intuitiv erkennen wird, dass Sie den Wert einer Variablen lieber als Teil einer Anweisung interpretieren möchten, möglicherweise mit mehr Variablen, anstatt sie einfach als Wert zu behandeln. Beachten Sie, dass die Verwendung von dynamischem SQL Ihnen die Möglichkeit gibt, [Bobby Tables] (http://bobby-tables.com/) zu treffen. – HABO

Antwort

0

In der SET-Klausel sollten Sie column = value haben, in Ihrem Fall haben Sie nur den Wert von @WerteListe, stattdessen sollten Sie eine Spalte von tblFI01_Auftraege = @WerteListe haben. TSQL Update syntax

+0

Wie ich die Beschreibung verstanden habe, sollte die Variable @WerteListe durch "Datum_geander = GetDate()" ersetzt werden. Also sollte die UPDATE-Anweisung gültig sein? – henry

+0

Die Beschreibung erneut lesen. Vielleicht sollte ich Englisch verstehen lernen .... Danke für Ihre Hilfe – henry

0

am besten ist, Ihre dynamische Abfrage in einer Variablen bilden, so dass Sie es vor der Ausführung

select @WerteListe= N'Datum_geaendert = GetDate()' 

select @sql = N' UPDATE tblFI01_Auftraege 
SET ' + @WerteListe + ' 
WHERE Auftrag_id = @Auftrag_ID' 

print @sql -- print out for your verification 

Execute sp_executesql 
      @sql 
      , N'Auftrag_ID int' 
      , @Auftrag_ID = 12; 
+0

Hallo, danke für Ihre Hilfe. Ich habe die Beschreibung missverstanden. Mit Ihrem Code hat es perfekt funktioniert! – henry