Quiero escribir una consulta para MS SQL Server que agrega una columna en una tabla. Pero no quiero que se muestre ningún error cuando ejecuto / ejecuto la siguiente consulta.
Estoy usando este tipo de consulta para agregar una tabla ...
IF EXISTS (
SELECT *
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
AND TYPE IN (N'U')
)
Pero no sé cómo escribir esta consulta para una columna.
sql-server
add
not-exists
Tavousi
fuente
fuente
sys.tables
lugar del "genérico"sys.objects
- entonces no tiene que especificar el tipo explícitamente (es obvio por elsys.tables
ya ...)Respuestas:
Puede usar una construcción similar usando la
sys.columns
tabla iosys.objects
.fuente
EXISTS
cláusula son idénticos. Cosas comoSELECT 1
oSELECT TOP 1
son innecesarias. LaEXISTS
cláusula misma le dice al optimizador de consultas que solo realice las lecturas mínimas necesarias para evaluar elEXISTS
... al menos en SQL Server. Otros motores de DB pueden tener un optimizador de consultas más o menos eficiente.ADD Column
consultas ... ¡debe ejecutarlas con demasiada frecuencia!fuente
COL_LENGTH('table_name', '[column_name]')
siempre devuelve nulo en SQL Server 2016 (COL_LENGTH('[table_name]', 'column_name') works as expected
).Otra alternativa Prefiero este enfoque porque es menos escrito pero los dos logran lo mismo.
También noté que el tuyo está buscando dónde existe una tabla que obviamente es solo esto
fuente
Aquí hay otra variación que funcionó para mí.
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS....
fuente
Espero que esto ayude. Más información
fuente
Al buscar una columna en otra base de datos, simplemente puede incluir el nombre de la base de datos:
fuente
fuente