Я в настоящее время использую sp_executesql для выполнения оператора T-SQL с динамическим именем таблицы. Однако это действительно ужасно для наблюдения чего-то как:
set @sql = 'UPDATE '+Table_Name+' SET ... WHERE '+someVar+' = ... AND '+someVar2' = ...'
sp_executesql @sql
То, что я хотел бы иметь, является Табличной переменной, которой ссылка на таблицу, таким образом, я мог сделать, например:
UPDATE TableRef SET ... WHERE ...
Поскольку, когда у меня есть действительно длинные операторы T-SQL, становится действительно трудным читать из-за формата его в строке.
Любые предложения были бы полезны.
Почему бы вам вместо этого не передать параметры в sp_executeSQL?
http://msdn.microsoft.com/en-us/library/ms188001.aspx
Я бы также прочтите эту статью http://www.sommarskog.se/dynamic_sql.html
Вы не можете. Если вы хотите использовать имя динамической таблицы в своем SQL, вы должны объединить его в свою строку.
Если в вашем запросе много ссылок на имя таблицы, вы можете сократить его, применив псевдоним имени таблицы, а для всех других экземпляров используйте псевдоним.
например.
SET @SQL = 'UPDATE t SET.... FROM ' + @TableName + ' t WHERE ....'
Просто будьте очень осторожны при использовании подобного динамического SQL. Убедитесь, что вы защищаете себя от SQL-инъекций.