Генераторы кода имеют тенденцию быть проще, когда они генерируют вывод, используя новую скобочную нотацию Microsoft ( []
) почти для всего.
Когда я впервые увидел это, я, правда, удивился реинкарнации несколько запрещенной цитируемой записи идентификатора.
Насколько я знаю, это проприетарное расширение от Microsoft (то есть Oracle не поддерживает его).
Глядя на SQL Server, нет никакой разницы, если вы определяете таблицу как
CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]);
или
CREATE TABLE dbo.Table_2 (col1 int, col2 int);
Это вопрос личного или корпоративного стиля. Быть последовательным.
Теперь, если вы хотите перенести вашу базу данных в Oracle, скобки не подходят.
Вы можете использовать старые идентификаторы в кавычках, но они чувствительны к регистру, что вызывает много проблем.
Является ли хорошей идеей удалить все скобки из сгенерированного кода, избегать использования пробелов, других специальных символов и зарезервированных ключевых слов для имен и просто кода таким образом, который понимает большинство СУБД?
источник
Скобки требуются, если имена вашей таблицы или столбца:
SELECT [column name] FROM table;
SELECT [wt[f]
илиSELECT [wt]]f]
^
или!
(да, они могут содержать эти символы!)KEY
,STATE
,RULE
, ...Очевидно, что если у вас есть контроль над схемой, избегайте использования таких имен, как эти. Однако в некоторых случаях лучшее имя является зарезервированным (например,
KEY
для ключевого столбца в общей таблице ключ-значение), поэтому вам решать, насколько сильно вы хотите его использовать (и, следовательно, его нужно заключать в кавычки везде).Я также использую скобки, чтобы скрыть синюю подсветку, которую SSMS и VS дают некоторые ключевые слова, подобные
DESCRIPTION
этим, которые не зарезервированы SQL Server, но в остальном являются специальными для этих инструментов.Обязательно используйте скобки при динамическом генерировании SQL. Самый простой способ сделать это - вызвать
QUOTENAME()
объекты, на которые вы динамически ссылаетесь (напримерSELECT QUOTENAME(name) FROM sys.databases;
).sp_MSforeachdb
Например, не делает этого .источник
Когда я пишу код, который генерирует код, я ставлю квадратные скобки вокруг имен объектов базы данных. Я не включаю скобки при написании кода вручную, и считаю, что это ухудшает читабельность кода. Я также запрещаю имена объектов базы данных с пробелами. SQL Server позволит вам использовать пробелы в именах объектов, но это не значит, что это хорошо.
источник
Я бы, вероятно, даже не пытался иметь портативный DDL. Было бы лучше, если бы я генерировал определения таблиц Oracle из системных представлений SQL Server, если это необходимо.
Я не думаю, что имеет смысл писать переносимый DML - PL / SQL полностью отличается от T-SQL. Для переносимости проще выставить вашу базу данных через API хранимых процедур. Подписи этих процедур должны быть одинаковыми на обеих платформах, но реализации могут использовать проприетарные функции - в целом это гораздо проще, чем пытаться использовать только стандарт SQL ANSI.
Этот вывод основан на многолетнем опыте разработки портативных систем, работающих как на Oracle, так и на SQL Server.
источник