2015-02-10 45 views
0

我想创建一个新的表与现有的表,其中表名应该从输入参数传递。 我正在尝试以下代码。需要从现有表创建一个新表

DECLARE @oldTableName nvarchar(50) 
DECLARE @newStagingTableName nvarchar(50) 
SET @oldTableName='OldTableName' 
SET @newStagingTableName ='NewTableName'; 
SELECT * INTO @newStagingTableName FROM @oldTableName WHERE 1 = 0; 

SQL服务器在分析此查询时发生错误。

+0

什么错误? – 2015-02-10 12:10:36

+1

'@ newStagingTableNameFROM'这是一个错字还是你没有添加空格? – Kami 2015-02-10 12:11:43

+0

'@newStagingTableNameFROM'附近有错误的syntex,期望'。',ID或QUATED _ID。 – Diboliya 2015-02-10 12:12:50

回答

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) 
+0

此查询正在工作。 – 2015-02-10 12:34:04

+0

使用QUOTENAME包装这两个表变量将大大减少SQL注入的时间。 – 2015-02-10 14:19:21

0

上线

SELECT * INTO @newStagingTableNameFROM @oldTableName WHERE 1 = 0; 

你没有@newStagingTableName之间和FROM

也检查不表NewTableName存在的空间?如果是这样,你不能直接通过参数访问它 - 你需要使用动态SQL - 也许this可以帮助

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 
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 

编辑:对不起,我没有看到其他人的答案是

相关问题