Generatory kodu są zwykle prostsze, gdy generują dane wyjściowe przy użyciu nowej notacji nawiasowej Microsoft ( []
) dla prawie wszystkiego.
Kiedy to zobaczyłem, pomyślałem o reinkarnacji nieco zakazanego cytowanego zapisu identyfikatora.
O ile mi wiadomo, jest zastrzeżonym rozszerzeniem firmy Microsoft (co oznacza, że Oracle go nie obsługuje).
Patrząc na SQL Server, nie ma różnicy, jeśli zdefiniujesz tabelę podobną
CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]);
lub
CREATE TABLE dbo.Table_2 (col1 int, col2 int);
To kwestia stylu osobistego lub korporacyjnego. Bądź konsekwentny.
Teraz, jeśli chcesz przeprowadzić migrację bazy danych do Oracle, nawiasy nie są dostępne.
Możesz użyć starych cytowanych identyfikatorów, ale uwzględniają wielkość liter, co powoduje wiele problemów.
Czy dobrym pomysłem jest usunięcie wszystkich nawiasów z generowanego kodu, unikanie używania spacji, innych znaków specjalnych i zastrzeżonych słów kluczowych dla nazw i po prostu kodowanie w sposób zrozumiały dla większości DBMS?
źródło
Wsporniki są wymagane, jeśli nazwa tabeli lub kolumny:
SELECT [column name] FROM table;
SELECT [wt[f]
lubSELECT [wt]]f]
^
lub!
(tak, mogą zawierać te symbole!)KEY
,STATE
,RULE
, ...Oczywiście, jeśli masz kontrolę nad schematem, unikaj używania takich nazw. Jednak w niektórych przypadkach najlepsza nazwa jest zastrzeżona (np.
KEY
Dla kolumny klucza w ogólnej tabeli klucz-wartość), więc to Ty decydujesz, jak bardzo chcesz go używać (i dlatego musisz go cytować wszędzie).Używam również nawiasów, aby ukryć niebieskie podświetlenie, że SSMS i VS podają niektóre takie słowa kluczowe
DESCRIPTION
, które nie są zarezerwowane przez SQL Server, ale są specjalne dla tych narzędzi.Zdecydowanie używaj nawiasów podczas dynamicznego generowania SQL. Najłatwiejszym sposobem jest wywołanie
QUOTENAME()
obiektów, do których dynamicznie się odwołujesz (npSELECT QUOTENAME(name) FROM sys.databases;
.).sp_MSforeachdb
na przykład tego nie robi .źródło
Kiedy piszę kod, który generuje kod, umieszczam nawiasy kwadratowe wokół nazw obiektów bazy danych. Nie uwzględniam nawiasów podczas pisania kodu ręcznie i uważam, że szkodzi to jego czytelności. Zabraniam także nazw obiektów bazy danych spacjami. SQL Server pozwoli ci używać spacji w nazwach obiektów, ale to nie znaczy, że to dobrze.
źródło
Prawdopodobnie nie próbowałbym nawet mieć przenośnego DDL. Byłbym lepiej, gdybym wygenerował definicje tabel Oracle z widoków systemowych SQL Server, jeśli to konieczne.
Nie wydaje mi się też, żeby pisanie przenośnego DML miało sens - PL / SQL różni się całkowicie od T-SQL. Aby ułatwić przenoszenie, łatwiej jest udostępnić bazę danych za pomocą interfejsu API procedur składowanych. Sygnatury tych procedur muszą być takie same na obu platformach, ale implementacje mogą korzystać z zastrzeżonych funkcji - ogólnie jest to o wiele łatwiejsze niż próba użycia tylko standardowego SQL ANSI.
Wniosek ten opiera się na kilkunastoletnim doświadczeniu w projektowaniu systemów przenośnych, pracujących zarówno na Oracle, jak i SQL Server.
źródło