需要从现有表创建新表

时间:2015-02-10 12:09:26

标签: c# asp.net sql-server c#-4.0

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

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

SQL Server在解析此查询时出错。

4 个答案:

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

编辑: 抱歉,我没有看到其他人回答