2009-12-02 44 views
4

我正在处理一些遗留的SQL,作者分隔了每个列名和数据类型声明。请参阅以下内容:分隔标识符是否被认为是Transact-SQL中的“最佳实践”?

 
CREATE TABLE SomeTable (
    [SomeDate] [datetime] NOT NULL, 
    [SomeInt] [int]  NOT NULL, 
    [SomeString] [nvarchar] NOT NULL 
) ON [PRIMARY] 
GO 

在为SQL Server编写T-SQL时,这是否被认为是最佳实践?由于我现在正在维护这些代码,我应该继续这种做法吗?

+1

这很烦人。 – 2009-12-03 16:33:05

回答

12

我个人只会写,如果你使用保留的关键字作为列/表名,你不应该这样做。就个人而言,我认为不然,它会使SQL代码变得不那么“干净”,并且更难以阅读。

这种风格通常是由SQL工具生成的,因为它保证不会有任何保留字冲突的问题。

+4

[和] [它] [还] [使] [它] [很多] [更难] [你] [代码] – 2009-12-02 22:16:50

+0

同意你们两个......混乱的代码和bollixes双击select-too – gbn 2009-12-03 06:16:32

+0

好吧..我们使用ORM,所以在我们的任何生产代码中都没有SQL,我不必担心混乱。所以我只写一次蓝色月亮的SQL;但是,我们手动编写数据库对象创建和修改脚本,并将它们保存在版本控制中,因此我想确保这些脚本能够达到最佳状态。 – 2009-12-03 19:09:09

4

如果表或列的名称像“SomeInt”一样是“无害的”,那么方括号[...]不是必需的 - 如果需要,您可以指定它们,不必这样做。

在另一方面 - 总是使用这些将确保,即使是“危险”之类'[Message]'和他人的,或者列名列名在他们的场所,如[Product Name],将永远是正确的处理。

所以 - 你不必继续这样做,但我认为这是一个很好的做法,如果它已被使用,我建议继续使用它。

+1

+1:保持目前的做法是好的 - 它可能不仅仅是你处理这些东西。 – 2009-12-02 22:16:14

0

我使用过的大多数生成SQL的MS工具都会自动执行此操作(旧的查询分析器,管理工作室等)。

0

[SomeName]是由SQL Server Management Studio自动生成的脚本生成的。就我个人而言,我发现它分散注意力,使名字更难读。

他们唯一真正的用途是允许标识符中的空格。

create table SomeTable 
(
    [some var] int 
) 

是有效的(虽然不妥当),同时

create table SomeTable 
(
    some var int 
) 

是无效的。

因此,这对于移植/维护传统项目非常有用。

0

刚开始使用mssql/t-sql时,解决方案可能在需要时使用单引号,因为这涵盖了弃用的方括号样式和新的双引号样式。如果我错了,请告诉我!

一个简单的例子。

1> sp_help sys.tables 
2> go 
Msg 102, Level 15, State 1, Server 
Incorrect syntax near '.'. 
1> sp_help 'sys.tables' 
2> go 
Name       Owner 
------------------------------ ---- 
tables       sys 
etc 
相关问题