我想创建一个包含现有表的新表,其中表名应该从输入参数传递。 我正在尝试以下代码。
DECLARE @oldTableName nvarchar(50)
DECLARE @newStagingTableName nvarchar(50)
SET @oldTableName='OldTableName'
SET @newStagingTableName ='NewTableName';
SELECT * INTO @newStagingTableName FROM @oldTableName WHERE 1 = 0;
SQL Server在解析此查询时出错。
答案 0 :(得分:2)
您可以尝试下面的动态SQL查询吗?
DECLARE @oldTableName nvarchar(50)
DECLARE @newStagingTableName nvarchar(50)
SET @oldTableName='OldTableName'
SET @newStagingTableName ='NewTableName'
DECLARE @sqlquery nvarchar(100) = 'SELECT * INTO ' + @newStagingTableName + ' FROM ' + @oldTableName
exec(@sqlquery)
答案 1 :(得分:0)
在线
SELECT * INTO @newStagingTableNameFROM @oldTableName WHERE 1 = 0;
@newStagingTableName和FROM
之间没有空格还检查表NewTableName是否存在?如果是这样,你不能直接通过参数访问它 - 你需要使用动态SQL - 也许this可以帮助
答案 2 :(得分:0)
试试这个
DECLARE @oldTableName NVARCHAR(50)
DECLARE @newStagingTableName NVARCHAR(50),
@sql NVARCHAR(100)=''
SET @oldTableName=''
SET @newStagingTableName ='';
SET @sql='select * INTO ' + @newStagingTableName
+ ' FROM ' + @oldTableName + ' WHERE 1 = 0;'
EXEC sp_executesql
@sql
答案 3 :(得分:0)
这应该有效。 。 。
DECLARE @oldTableName nvarchar(50)
DECLARE @newStagingTableName nvarchar(50)
declare @sql nvarchar(max);
SET @oldTableName='oldTableName'
SET @newStagingTableName ='newStagingTableName ';
SET @sql='SELECT * INTO ' + @newStagingTableName + ' FROM ' + @oldTableName + ' WHERE 1 = 0;'
exec sp_executesql @sql
编辑: 抱歉,我没有看到其他人回答