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

iam*_*cev 3 sql database sql-server

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'"
Run Code Online (Sandbox Code Playgroud)

错误说

'7202'附近的语法错误.

Stu*_*tLC 9

您可以使用数字作为表名(或数据库名称或模式名称 - 请参阅我的注释),但是,您需要使用以下命令对其进行转义[]:

select *
into [123].[456].[789] 
from OtherTable;
Run Code Online (Sandbox Code Playgroud)

Where [123]表示数据库,[456]表示模式并[789]表示表.

编辑

为了标准化的利益,例如,如果RDBMS之间存在未来可移植性的可能性,请注意应优先使用双引号"而不是[]转义,例如

SELECT * from "123"."456"."789";
Run Code Online (Sandbox Code Playgroud)

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

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

select QUOTENAME('123', '"');
Run Code Online (Sandbox Code Playgroud)