Создание таблицы SQL с использованием динамического имени переменной - PullRequest
12 голосов
/ 25 мая 2010

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

что-то вроде

DECLARE @SQLTable Varchar(20) 
SET @SQLTable = 'SomeTableName' + ' ' + '20100526' 
SELECT * INTO quotename(@SQLTable)
 FROM SomeTableName

но я получаю

Неверный синтаксис рядом с'@SQLTable'.

Это всего лишь часть небольшого сценария для обслуживания, поэтому мне не нужно беспокоиться об уколах.

Ответы [ 5 ]

16 голосов
/ 25 мая 2010
DECLARE @MyTableName nvarchar(20);
DECLARE @DynamicSQL nvarchar(1000);

SET @MyTableName = "FooTable";


SET @DynamicSQL = N'SELECT * INTO ' + @MyTableName + ' FROM BarTable';

EXEC(@DynamicSQL);
6 голосов
/ 25 мая 2010

К сожалению, вы не можете использовать переменные связывания для имен таблиц, имен столбцов и т. Д. В этом случае вы должны сгенерировать динамический SQL и использовать exec.

4 голосов
/ 25 мая 2010

Вы должны использовать синонимы:

- Создайте синоним для таблицы Product в AdventureWorks2008R2. СОЗДАТЬ СИНОНИМ MyProduct FOR AdventureWorks2008R2.Production.Product; GO

- Запросить таблицу Product, используя синоним. ИСПОЛЬЗОВАТЬ tempdb; ИДТИ ВЫБЕРИТЕ ProductID, Имя ОТ MyProduct ГДЕ ProductID <5; GO </p>

http://msdn.microsoft.com/en-us/library/ms177544.aspx

4 голосов
/ 25 мая 2010
DECLARE @Script NVARCHAR(MAX);
SET @Script = N'SELECT * INTO SomeTableName_' + N'20100526' + N' FROM SomeTableName';
EXEC sp_executesql @Script

Я оставил дату отдельно, так как я предполагаю, что вы хотите рассчитать ее для каждого прогона.

0 голосов
/ 17 апреля 2017
DECLARE @MyTableName nvarchar(20);
DECLARE @DynamicSQL nvarchar(1000);

SET @MyTableName = "FooTable";


SET @DynamicSQL = N'SELECT * INTO ' + @MyTableName + ' FROM BarTable';

exec @DynamicSQL;

этот запрос верный, но используйте одинарную кавычку в ("FooTable") = "FooTable"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...