Считают ли идентификаторы с разделителями «лучшую практику» в Transact-SQL? - PullRequest
6 голосов
/ 03 декабря 2009

Я работаю над устаревшим SQL, и автор разграничил имя каждого столбца и объявление типа данных. Смотрите следующее:

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

Считается ли это лучшей практикой при написании T-SQL для SQL Server? Так как я сейчас поддерживаю этот код, должен ли я продолжить практику?

Ответы [ 5 ]

12 голосов
/ 03 декабря 2009

Лично я бы написал это, если вы используете зарезервированные ключевые слова в качестве имен столбцов / таблиц, чего не должно быть в любом случае. Лично я считаю иначе, это делает код SQL менее «чистым» и немного более трудным для чтения.

Этот стиль обычно генерируется инструментами SQL, поскольку он гарантирует, что с конфликтами зарезервированных слов не возникнет никаких проблем.

4 голосов
/ 03 декабря 2009

Если имя таблицы или столбца «безвредно», например «SomeInt», то квадратные скобки [...] не требуются - вы можете указать их, если хотите, не обязательно.

С другой стороны - всегда их использование гарантирует, что даже «опасные» имена столбцов, такие как '[Message]' и другие, или имена столбцов с пробелами в них, например [Product Name], всегда будут обрабатываться правильно.

Итак, вам не нужно продолжать это делать, но я думаю, что это хорошая практика, и если она уже использовалась, я бы рекомендовал продолжать ее использовать.

0 голосов
/ 16 сентября 2011

Просто начните с 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
0 голосов
/ 03 декабря 2009

[SomeName] - это то, что создается автоматически генерируемыми сценариями из SQL Server Management Studio. Лично я нахожу это отвлекающим и затрудняющим чтение имен.

Единственное реальное использование для них - разрешить пробелы в идентификаторах.

т.е.

create table SomeTable
(
   [some var] int
)

действует (хотя и нежелательно), а

create table SomeTable
(
   some var int
)

недействительно.

Так что это было бы полезно для переноса / поддержки устаревших проектов.

0 голосов
/ 03 декабря 2009

Большинство инструментов MS, с которыми я работал, для генерации SQL, делают это автоматически (старый Query Analyzer, Management Studio и т. Д.). Это не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...