Я хочу составить резервные таблицы SQL с помощью имен переменной.
что-то вроде
DECLARE @SQLTable Varchar(20)
SET @SQLTable = 'SomeTableName' + ' ' + '20100526'
SELECT * INTO quotename(@SQLTable)
FROM SomeTableName
но я добираюсь
Неправильный синтаксис рядом '@SQLTable'.
Это - просто часть маленького сценария для maintence, таким образом, я не должен волноваться об инжекциях.
DECLARE @MyTableName nvarchar(20);
DECLARE @DynamicSQL nvarchar(1000);
SET @MyTableName = "FooTable";
SET @DynamicSQL = N'SELECT * INTO ' + @MyTableName + ' FROM BarTable';
EXEC(@DynamicSQL);
К сожалению, вы не можете использовать переменные связывания для имен таблиц, столбцов и т. Д. В этом случае вы должны сгенерировать динамический SQL и использовать exec
.
Вам следует изучить использование синонимов:
- Создайте синоним для таблицы Product в AdventureWorks2008R2. СОЗДАТЬ SYNONYM MyProduct ДЛЯ AdventureWorks2008R2.Production.Product; GO
- запросить таблицу Product с использованием синонима. ИСПОЛЬЗУЙТЕ tempdb; ИДТИ ВЫБЕРИТЕ ProductID, имя ОТ MyProduct ГДЕ ProductID <5; GO
DECLARE @Script NVARCHAR(MAX);
SET @Script = N'SELECT * INTO SomeTableName_' + N'20100526' + N' FROM SomeTableName';
EXEC sp_executesql @Script
Я оставил дату отдельно, так как предполагаю, что вы хотите рассчитывать ее для каждого прогона.