为什么我不能“SELECT INTO”一个名称以数字开头的数据库?

时间:2015-06-02 04:28:18

标签: sql sql-server database

Main.dbName = "7202" 

query = "select * into " + Main.dbName + ".dbo.[AccountReceivableHistory]
        from " + dbOrigin + ".dbo.[AccountReceivableHistory] where
        AccountReceivableHistory].Date >= '2012-12-27' and    
        AccountReceivableHistory].Date < '2012-12-28'"

错误说

  

'7202'附近的语法错误。

1 个答案:

答案 0 :(得分:9)

您可以使用数字作为表名(或数据库名称或模式名称 - 请参阅我的评论),但是,您需要使用[]转义它:

select *
into [123].[456].[789] 
from OtherTable;

[123]表示数据库,[456]表示架构,[789]表示表。

修改

符合standardisation的利益,例如如果RDBMS之间有可能实现未来的可移植性,请注意应优先使用双引号"而不是[]进行转义,例如。

SELECT * from "123"."456"."789";

但是,您需要确保在连接上设置set QUOTED_IDENTIFIER ON

如果动态构造对象的名称,请注意,通过提供字符分隔符作为第二个参数,也可以覆盖QUOTENAME function的默认转义,例如:

select QUOTENAME('123', '"');