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ühre / ausführe.
Ich benutze 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.
sql-server
add
not-exists
Tavousi
quelle
quelle
sys.tables
anstelle des "generischen" verwendensys.objects
- dann müssen Sie den Typ nicht explizit angeben (es ist aus demsys.tables
bereits ....)Antworten:
Sie können ein ähnliches Konstrukt verwenden, indem Sie die
sys.columns
Tabelle io verwendensys.objects
.quelle
EXISTS
Klausel sind identisch. Dinge wieSELECT 1
oderSELECT TOP 1
sind unnötig. DieEXISTS
Klausel selbst weist den Abfrageoptimierer an, nur die minimalen Lesevorgänge durchzuführen, die erforderlich sind, um dieEXISTS
... zumindest in SQL Server auszuwerten . Andere DB-Engines verfügen möglicherweise über ein mehr oder weniger effizientes Abfrageoptimierungsprogramm.ADD Column
Abfragen optimieren ... müssen Sie sie zu oft ausführen !quelle
COL_LENGTH('table_name', '[column_name]')
in SQL Server 2016 (COL_LENGTH('[table_name]', 'column_name') works as expected
) immer null zurückgegeben wird .Eine andere Alternative. Ich bevorzuge diesen Ansatz, weil er weniger schriftlich ist, aber beide das Gleiche erreichen.
Mir ist auch aufgefallen, dass Sie nach einem Tisch suchen, der offensichtlich genau das ist
quelle
Hier ist eine weitere Variante, die für mich funktioniert hat.
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS....
quelle
Ich hoffe das würde helfen. Mehr Info
quelle
Wenn Sie in einer anderen Datenbank nach einer Spalte suchen, können Sie einfach den Datenbanknamen angeben:
quelle
quelle