2010-06-18 21 views
6

Attualmente sto usando sp_executesql per eseguire un'istruzione T-SQL con un nome di tabella dinamico. Tuttavia, è davvero brutto vedere qualcosa di simile:In SQL Server, come posso creare una variabile di riferimento su una tabella?

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

Cosa avrei preferito piacerebbe avere è una variabile di tabella, di cui è un riferimento a un tavolo, così ho potuto fare per esempio:

UPDATE TableRef SET ... WHERE ... 

Perché quando ho davvero lunghe istruzioni T-SQL diventa molto difficile da leggere a causa del formato di esso all'interno di una stringa.

Qualsiasi suggerimento sarebbe utile.

+0

btw, non 'SET sql = ...' ma 'SET @sql = ...' – abatishchev

+0

Sì, grazie per le correzioni. Ho continuato a ricevere blockquote quando ho premuto @. Non ero consapevole di poterlo fare in questo modo. Grazie. –

+0

ón: il prodotto si chiama "SQL Server", non "MSSQL". –

risposta

0

Non è possibile. Se si desidera utilizzare un nome di tabella dinamico nel proprio SQL, è necessario concatenarlo nella stringa.

Se nella query sono presenti molti riferimenti al nome della tabella, è possibile accorciarlo aliasing del nome della tabella e, per tutte le altre istanze, utilizzare l'alias.

ad es.

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

Basta fare molta attenzione quando si utilizza SQL dinamico come questo. Assicurati di proteggerti dall'iniezione SQL.

Problemi correlati