Ich möchte eine Abfrage für MS SQL Server schreiben, die einer Tabelle eine Spalte hinzufügt. Ich möchte jedoch keine Fehleranzeige, wenn ich die folgende Abfrage ausführen/ausführen möchte.
Ich verwende diese Art von Abfrage, um eine Tabelle hinzuzufügen ...
IF EXISTS (
SELECT *
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
AND TYPE IN (N'U')
)
Aber ich weiß nicht, wie ich diese Abfrage für eine Spalte schreiben soll.
Sie können ein ähnliches Konstrukt verwenden, indem Sie die sys.columns
-Tabelle io sys.objects
verwenden.
IF NOT EXISTS (
SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID(N'[dbo].[Person]')
AND name = 'ColumnName'
)
IF COL_LENGTH('table_name', 'column_name') IS NULL
BEGIN
ALTER TABLE table_name
ADD [column_name] INT
END
Eine andere Alternative. Ich bevorzuge diesen Ansatz, weil er weniger schreibt, aber die beiden erreichen dasselbe.
IF COLUMNPROPERTY(OBJECT_ID('dbo.Person'), 'ColumnName', 'ColumnId') IS NULL
BEGIN
ALTER TABLE Person
ADD ColumnName VARCHAR(MAX) NOT NULL
END
Ich habe auch bemerkt, dass Sie suchen, wo es einen Tisch gibt, der offensichtlich genau das ist
if COLUMNPROPERTY( OBJECT_ID('dbo.Person'),'ColumnName','ColumnId') is not null
/ * ÜBERPRÜFUNG DER SPALTE IN DER TABELLE * /
IF COL_LENGTH('TABLE_NAME','COLUMN_NAME') IS NULL
BEGIN
ALTER TABLE .... /*COLUMN DOES NOT EXIST OR CALLER DOES NOT HAVE PERMISSION TO VIEW THE OBJECT*/
END
Hier ist eine weitere Variante, die für mich funktioniert hat.
IF NOT EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE upper(TABLE_NAME) = 'TABLENAME'
AND upper(COLUMN_NAME) = 'COLUMNNAME')
BEGIN
ALTER TABLE [dbo].[Person] ADD Column
END
GO
BEARBEITEN: Beachten Sie, dass
INFORMATION_SCHEMA
-Ansichten möglicherweise nicht immer aktualisiert werden. Verwenden Sie stattdessenSYS.COLUMNS
:
IF NOT EXISTS (SELECT 1
FROM SYS.COLUMNS....
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS WHERE
OBJECT_ID = OBJECT_ID(N'[dbo].[Person]') AND name = 'DateOfBirth')
BEGIN
ALTER TABLE [dbo].[Person] ADD DateOfBirth DATETIME
END