sql-server - 在 Oracle/SqlServer/PgSql 表名开头使用@

标签 sql-server oracle postgresql special-characters

我想了解使用以 @ 符号开头的表名是否有任何缺点。

我们需要一个易于识别的模式来将这些表与同一架构中的其他表区分开来。

我们目前与以下所有人员合作:
- Oracle 10g 及以上
- SQLServer 2008 R2 及以上版本
- Postgres 9.1 及以上版本

我尝试了所有这些并且表创建成功,但我找不到好的文档来确定这是否真的被允许。

最佳答案

@ 是(标准)SQL 中标识符的非法字符。

手册中记录了不需要双引号的有效(合法)标识符的规则:

Postgres manual本质上引用了 SQL 标准:

SQL identifiers and key words must begin with a letter (a-z, but also letters with diacritical marks and non-Latin letters) or an underscore (_). Subsequent characters in an identifier or key word can be letters, underscores, digits (0-9), or dollar signs ($)

Oracle manual本质上说的是一样的:

Nonquoted identifiers can contain only alphanumeric characters from your database character set and the underscore (_), dollar sign ($), and pound sign (#).

请注意,Oracle 在涉及 DBLinks 时有一个异常(exception):

Database links can also contain periods (.) and "at" signs (@). Oracle strongly discourages you from using $ and # in nonquoted identifiers.

如果您使用带引号的标识符,您可以在标识符中包含一个@。但 Oracle 手册也指出:Oracle 不建议对数据库对象名称使用带引号的标识符

关于sql-server - 在 Oracle/SqlServer/PgSql 表名开头使用@,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29371917/

相关文章:

sql - 如何处理 CROSS APPLY 中的空行 [SQL Server]

perl - 在 Ubuntu 中的 postgres-9.4 上安装 perl 扩展时出错

c# - 使用回滚的 Postgres、Npgsql 和集成测试

sql - 数据库中的回滚和调度?

json - HIVE,如何从数组中获取元素,元素本身也是一个数组

c# - Linq "Unable to cast object of type ' System.DateTime' 键入 'System.String'“错误

postgresql - 如何在 .net 核心上使用 ef 核心映射 postgresql 中的枚举(首先是数据库)

asp.net - T-SQL 检查重复的 field1 值但不同的 field2 值

java - Microsoft Sql Server 未使用 java 获取具有Where Condition 的记录

java - 如何在java中的where子句中传递变量的值?