Chcę napisać zapytanie do MS SQL Server, które dodaje kolumnę do tabeli. Ale nie chcę wyświetlać żadnych błędów, gdy uruchamiam / wykonuję następujące zapytanie.
Używam tego rodzaju zapytań, aby dodać tabelę ...
IF EXISTS (
SELECT *
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
AND TYPE IN (N'U')
)
Ale nie wiem, jak napisać to zapytanie dla kolumny.
sql-server
add
not-exists
Tavousi
źródło
źródło
sys.tables
zamiast „ogólnego”sys.objects
- wtedy nie musisz jawnie określać typu (to oczywiste zsys.tables
już ....)Odpowiedzi:
Możesz użyć podobnej konstrukcji, korzystając z
sys.columns
tabeli iosys.objects
.źródło
EXISTS
klauzuli są identyczne. Rzeczy takie jakSELECT 1
lubSELECT TOP 1
są niepotrzebne. SamaEXISTS
klauzula mówi optymalizatorowi zapytań, aby wykonywał tylko minimalne odczyty niezbędne do ocenyEXISTS
... przynajmniej w SQL Server. Inne silniki DB mogą mieć mniej lub bardziej wydajny optymalizator zapytań.ADD Column
zapytania ... musisz je uruchamiać zbyt często!źródło
COL_LENGTH('table_name', '[column_name]')
zawsze zwraca wartość null w SQL Server 2016 (COL_LENGTH('[table_name]', 'column_name') works as expected
).Kolejna alternatywa. Wolę takie podejście, ponieważ jest mniej pisania, ale obydwoje osiągają to samo.
Zauważyłem również, że twój szuka tam, gdzie istnieje stół, to oczywiście tylko to
źródło
Oto kolejna odmiana, która zadziałała dla mnie.
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS....
źródło
Mam nadzieję, że to pomoże. Więcej informacji
źródło
Sprawdzając kolumnę w innej bazie danych, możesz po prostu dołączyć nazwę bazy danych:
źródło
źródło