2010-06-18 6 views
6

Ich verwende derzeit sp_executesql, um eine T-SQL-Anweisung mit einem dynamischen Tabellennamen auszuführen. Es ist aber wirklich hässlich so etwas wie zu sehen:Wie erstelle ich in SQL Server eine Referenzvariable für eine Tabelle?

set @sql = 'UPDATE '+Table_Name+' SET ... WHERE '+someVar+' = ... AND '+someVar2' = ...' 
sp_executesql @sql 

Was ich lieber haben möchte, ist eine Tabelle Variable, von denen ein Verweis auf eine Tabelle ist, so konnte ich zum Beispiel so tun:

UPDATE TableRef SET ... WHERE ... 

Weil, wenn ich wirklich lange T-SQL-Anweisungen habe, wird es wirklich schwierig zu lesen, aufgrund des Formats in einer Zeichenfolge.

Alle Vorschläge wären hilfreich.

+0

BTW, nicht 'SET sql = ...' aber 'SET @sql = ...' – abatishchev

+0

Ja, danke für die Fixes. Ich bekam Blockquote, als ich @ drückte. Ich war mir nicht bewusst, dass ich es so machen könnte. Vielen Dank. –

+0

ón: Das Produkt heißt "SQL Server", nicht "MSSQL". –

Antwort

0

Sie können nicht. Wenn Sie in Ihrem SQL einen dynamischen Tabellennamen verwenden möchten, müssen Sie ihn in Ihre Zeichenfolge verketten.

Wenn Sie in Ihrer Abfrage viele Verweise auf den Tabellennamen haben, können Sie ihn verkürzen, indem Sie den Tabellennamen aliasieren, und für alle anderen Instanzen den Alias ​​verwenden.

z.B.

SET @SQL = 'UPDATE t SET.... FROM ' + @TableName + ' t WHERE ....' 

Seien Sie sehr vorsichtig, wenn Sie dynamisches SQL wie dieses verwenden. Stellen Sie sicher, dass Sie sich vor SQL-Injection schützen.

Verwandte Themen