Msg 2812: Создать таблицу с помощью динамического сценария

Я хотел создать таблицу, используя динамический SQL.

Если я создам таблицу, используя

CREATE Table TodayTemp(id varchar(20))
DROP TABLE TodayTemp

Тогда нет проблем. Это работает нормально. Но проблема в том, что я не могу динамически создавать столбцы. Поэтому я попытался использовать скрипт создания хранилища в переменной, а затем, наконец, выполнить их с помощью команды EXEC.

Нравиться

Declare @CreateTableCmd varchar(max)
SET @CreateTableCmd = 'CREATE Table TodayTemp(id varchar(20))'
Exec @CreateTableCmd

Но это вызывает ошибку

Сообщение 2812, уровень 16, состояние 62, строка 6
Не удалось найти хранимую процедуру «СОЗДАТЬ таблицу TodayTemp (id varchar (20))».


person Romesh    schedule 06.09.2013    source источник
comment
Кстати, ваша скрипка ничего не показывает.   -  person juergen d    schedule 06.09.2013
comment
На самом деле Fiddel не меняет свой URL-адрес до тех пор, пока что-то не будет сделано без ошибок.   -  person Romesh    schedule 06.09.2013


Ответы (3)


Добавьте круглые скобки вокруг вашей переменной при выполнении

Declare @CreateTableCmd varchar(max)
SET @CreateTableCmd = 'CREATE Table TodayTemp (id varchar(20))'
Exec (@CreateTableCmd)
     ^---------------^--------here

демонстрация SQLFiddle

person juergen d    schedule 06.09.2013
comment
Отличный ответ. Здесь есть дополнительная информация: technet.microsoft. com/en-us/library/aa175921%28v=sql.80%29.aspx - person dcaswell; 06.09.2013

если вы хотите выполнить свой скрипт с помощью exec, назовите его так:

Exec (@CreateTableCmd)

Другой способ сделать это — использовать хранимую процедуру sp_executesql:

exec sp_executesql @stmt = @CreateTableCmd

есть много ссылок, сравнивающих эти два подхода:

person Roman Pekar    schedule 06.09.2013

Declare @CreateTableCmd varchar(max)
SET @CreateTableCmd = 'CREATE Table TodayTemp'
Exec (@CreateTableCmd)

Это должно делать свое дело

Радж

person Raj    schedule 06.09.2013