Имя таблицы переменных в динамическом sql с COALESCE
Я хочу получить столбцы таблицы в переменной в этой форме col1,col2,col3
Поэтому я использовал следующий запрос
SELECT @cols = COALESCE(@cols + ', ', '') + column_name FROM
INFORMATION_SCHEMA.COLUMNS where TABLE_CATALOG='mudb' and TABLE_NAME='mytbl'
Я был успешным с выше. Но когда я хочу использовать имя переменной таблицы. У меня проблема. Я старался
SELECT @cols = COALESCE(@cols + ', ', '') + column_name FROM
INFORMATION_SCHEMA.COLUMNS where TABLE_CATALOG='mudb' and TABLE_NAME=@tbl
Но это дает нулевой результат. Тогда я стараюсь использовать EXECUTE sp_executesql
set @FullStatement='SELECT @cols = COALESCE(@cols + '', '', '''') +
column_name FROM INFORMATION_SCHEMA.COLUMNS where TABLE_CATALOG=''mudb''
and TABLE_NAME=@tbl'
PRINT @FullStatement
EXECUTE sp_executesql @FullStatement
Тогда это дает мне ошибку Must declare the scalar variable "@cols"
но @cols объявлен
1 ответ
@cols
может быть объявлено в рамках скрипта, который вы запускаете. Он не объявлен в области динамического SQL. Переменные не наследуются от одного уровня к другому.
Итак, вы хотите передать его в среду выполнения, что вы можете сделать с sp_executesql
:
set @FullStatement='SELECT @cols = COALESCE(@cols + '', '', '''') +
column_name FROM INFORMATION_SCHEMA.COLUMNS where TABLE_CATALOG=''mudb''
and TABLE_NAME=@tbl'
PRINT @FullStatement
EXECUTE sp_executesql @FullStatement, N'@Cols varchar(8000) output, @Tbl varchar(8000)',
@cols = @cols, @tbl = 'MyTable';
Вот как вы получаете оператор execute для работы. Однако этот метод объединения столбцов не будет работать в динамическом SQL.