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.tableslugar del "genérico"sys.objects- entonces no tiene que especificar el tipo explícitamente (es obvio por elsys.tablesya ...)Respuestas:
Puede usar una construcción similar usando la
sys.columnstabla iosys.objects.fuente
EXISTScláusula son idénticos. Cosas comoSELECT 1oSELECT TOP 1son innecesarias. LaEXISTSclá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 Columnconsultas ... ¡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