【问题标题】:Need to create a new table from existing table需要从现有表创建一个新表
【发布时间】:2015-02-10 12:09:25
【问题描述】:

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

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

SQL 服务器在解析此查询时出错。

【问题讨论】:

  • @newStagingTableNameFROM这是错字还是没有加空格?
  • '@newStagingTableNameFROM' 附近的语法不正确,需要 '.'、ID 或 QUATED _ID。
  • 这里只是错字。
  • 尝试执行(@mySQLstr)
  • Table name as variable的可能重复

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


【解决方案1】:

你能试试下面的动态 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)

【讨论】:

  • 用 QUOTENAME 包装两个表变量将大大有助于防止 sql 注入。
【解决方案2】:

上线

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

@newStagingTableName 和 FROM 之间没有空格

还要检查表 NewTableName 是否存在?如果是这样,您不能只通过参数直接访问它 - 您需要使用动态 SQL - 也许this 可以提供帮助

【讨论】:

    【解决方案3】:

    试试这个

    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 
    

    【讨论】:

      【解决方案4】:

      这应该可以。 . .

      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
      

      编辑: 对不起,我没有看到其他人回答它

      【讨论】:

        猜你喜欢
        • 2012-11-08
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 2019-03-15
        相关资源
        最近更新 更多