web-dev-qa-db-ja.com

カタログビューと同じ名前のSQLテーブル

SQLでテーブルに名前を付けるときは、SQLの予約済みキーワードに近づかないようにしますが、今日、同僚がEventsをテーブル名として使用することに疑問を呈しました。彼らは、SSMSで緑色に変わるものはテーブル名として使用すべきではないと述べました。

MS SQL Serverのテーブル名としてEventsを使用する際に懸念すべき矛盾や問題はありますか?

3
zeroef

また、ユーザーが作成したオブジェクトに予約語を使用しないように最善を尽くしていますが、本当にを回避するのが難しい場合もあります。一部の非常に一般的な用語は予約語です(例:UserおよびLoginなど)。そのため、絶対に避けなければならないことは、あまり意味がなく、直感的にわかりにくい名前を選択する必要があることを意味しますあなたのプロジェクトのために、それは本当にあなたのプロジェクトや会社に利益をもたらしません。

したがって、競合を回避するために必要なのは、唯一の「本当の意味」です:always予約語であるオブジェクト名を区切ります(つまり、[]で囲まれた名前を常に指定します)。

SSMSで色が変わるすべての単語が技術的な矛盾であるとは限りませんが、だからといってそれらを区切る必要がないという意味ではありません。これらの単語は、将来のバージョンで技術的な衝突になる可能性があり、アップグレードを複雑にする(つまり、時間を増やす、つまりコストがかかる)可能性があります。

簡単な例:

USE [tempdb];
CREATE TABLE dbo.Select ([Col1] INT); -- "Select" = blue
/*
Msg 156, Level 15, State 1, Line XXXXX
Incorrect syntax near the keyword 'Select'.
Msg 102, Level 15, State 1, Line XXXXX
Incorrect syntax near 'INT'.
*/


CREATE TABLE dbo.[Select] ([Col1] INT);
-- Success


CREATE TABLE dbo.Event ([Col1] INT); -- "Event" = blue
-- Success


CREATE TABLE dbo.Events ([Col1] INT); -- "Events" = green
-- Success

繰り返しになりますが、「イベント」は必須で区切られていませんが、使用する場合は、競合がないことを保証するためにalways[Events]として指定することを強くお勧めします。

5
Solomon Rutzky

SSMSでの構文の色分けは、Wordを識別子として使用しない理由ではありませんが、ドキュメントで 現在および将来の予約済みキーワード としてリストされているオブジェクトに名前を付けないようにすることをお勧めします。

4
Dan Guzman