【问题标题】:Using a variable as table name fails使用变量作为表名失败
【发布时间】:2015-11-11 22:09:48
【问题描述】:

为什么会失败并显示以下错误消息:

消息 102,级别 15,状态 1,行 1 “reporting_rawdata_v2”附近的语法不正确。

表的名称是“dbo.reporting_rawdata_v2”,但无论有/没有“dbo”,它仍然失败......

Use reporting2 
Go

Declare @Backupdate varchar(25), @sql NVARCHAR(max)
Set @Backupdate = REPLACE(REPLACE(CAST(CONVERT(VARCHAR(20), SYSDATETIME(), 100) as varchar),' ','_'),':', '')
Select @Backupdate

SET @sql = 'Select * Into reporting_rawdata_BACKUP_' + @Backupdate + 'From reporting_rawdata_v2';
EXEC (@sql);

【问题讨论】:

  • 没有“Into”是否可以工作?
  • 尝试在最后一个字符串的开头,'from'之前添加一个空格?
  • 将您的 exec 更改为 Print 以查看实际的 sql 是什么......之后应该直接修复
  • 缺少一些标签,例如 dbms。
  • 动态命名的表和“发件人”之间没有空格,所以可以解决这个问题。

标签: sql sql-server tsql execute


【解决方案1】:

动态命名表和From之间没有空格

SET @sql = 'Select * Into reporting_rawdata_BACKUP_' + @Backupdate + ' From reporting_rawdata_v2';
EXEC (@sql);

【讨论】:

  • 越读越觉得自己走错了路,这更简单也更明显。我已经赞成这个答案并删除了我的答案。
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 2014-05-02
  • 2021-11-16
相关资源
最近更新 更多