Necesito agregar una columna específica si no existe. Tengo algo como lo siguiente, pero siempre devuelve falso:
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTableName'
AND COLUMN_NAME = 'myColumnName')
¿Cómo puedo verificar si existe una columna en una tabla de la base de datos de SQL Server?
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
funciona bien.EXEC sp_executesql
formadaUPDATE
.FROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Respuestas:
SQL Server 2005 en adelante:
La versión de Martin Smith es más corta:
fuente
sys.columns
Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
COL_LENGTH
deben ser sin comillas. En teoría, es posible que alguien cree una columna que realmente tenga un nombre de[COLUMN_NAME]
, por ejemplo,CREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #T
y sería ambiguo si esta no fuera la regla.Una versión más concisa
El punto sobre los permisos para ver metadatos se aplica a todas las respuestas, no solo a esta.
Tenga en cuenta que el nombre de la primera tabla de parámetros
COL_LENGTH
puede estar en uno, dos o tres formatos de nombre de parte, según sea necesario.Un ejemplo que hace referencia a una tabla en una base de datos diferente es
Una diferencia con esta respuesta en comparación con el uso de las vistas de metadatos es que las funciones de metadatos, como
COL_LENGTH
siempre, solo devuelven datos sobre cambios comprometidos, independientemente del nivel de aislamiento vigente.fuente
IF OBJECT_ID('TableName','U') IS NULL
para verificar la existencia de objetos oDB_ID('foo')
para verificar la existencia de la base de datos.x>>2
lugar dex/4
en C ++. El código más detallado (if exists (select column_name from information_schema ...)
) ocupa mucho más espacio, pero nadie se rascaría la cabeza tratando de descubrir qué hace.INFORMATION_SCHEMA
vistas osys.columns
visitas al disco, mientrasCOL_LENGTH
utiliza metadatos de base de datos en caché.Ajusta lo siguiente para adaptarlo a tus requisitos específicos:
Editar para lidiar con la edición a la pregunta : Eso debería funcionar: revise cuidadosamente su código para ver si hay errores estúpidos; ¿está consultando INFORMACIÓN_SCHEMA en la misma base de datos a la que se aplica su inserción, por ejemplo? ¿Tiene un error tipográfico en el nombre de su tabla / columna en cualquiera de las declaraciones?
fuente
Prueba esto...
fuente
SELECT 1
lugar deSELECT TOP 1 1
;).EXISTS
declaración, SQL optimiza automáticamente las columnas (al igual quecount(*)
), por lo queSELECT *
será suficiente.and [TABLE_SCHEMA] = '???'
a la cláusula WHERE.Para las personas que están comprobando la existencia de la columna, para dejarla caer.
Desde SQL Server 2016 puede usar nuevas instrucciones DIE en lugar de grandes
IF
contenedoresfuente
Preferiría
INFORMATION_SCHEMA.COLUMNS
una tabla del sistema porque Microsoft no garantiza preservar las tablas del sistema entre versiones. Por ejemplo,dbo.syscolumns
todavía funciona en SQL 2008, pero está en desuso y podría eliminarse en cualquier momento en el futuro.fuente
INFORMATION_SCHEMA
vistas contienen solo metadatos estándar ANSI. Sin embargo, eso es suficiente para una prueba de existencia.Puede usar las vistas del sistema de esquema de información para averiguar casi cualquier cosa sobre las tablas que le interesan:
También puede interrogar vistas, procedimientos almacenados y prácticamente cualquier cosa sobre la base de datos utilizando las vistas Information_schema.
fuente
Intenta algo como:
Entonces úsalo así:
Debería funcionar tanto en SQL Server 2000 como en SQL Server 2005. No estoy seguro acerca de SQL Server 2008, pero no veo por qué no.
fuente
Primero verifique si la combinación
table
/column
(id
/name
) existe endbo.syscolumns
(una tabla interna de SQL Server que contiene definiciones de campo), y si no, emita laALTER TABLE
consulta apropiada para agregarla. Por ejemplo:fuente
Un buen amigo y colega mío me mostró cómo también puede usar un
IF
bloque con funciones SQLOBJECT_ID
yCOLUMNPROPERTY
en SQL SERVER 2005+ para verificar una columna. Puede usar algo similar a lo siguiente:Puedes verlo por ti mismo aquí
fuente
COLUMNPROPERTY
solo.fuente
Esto funcionó para mí en SQL 2000:
fuente
Prueba esto
fuente
INFORMATION_SCHEMA.TABLES
y no filtra columnas para una tabla específica, por lo que a veces devolverá más de una fila para los mismos nombres de columna en tablas separadas;).Necesitaba algo similar para SQL SERVER 2000 y, como señala @Mitch, esto solo funciona en 2005+.
En caso de que ayude a alguien más, esto es lo que funcionó para mí al final:
fuente
fuente
fuente
Una versión de la tabla temporal de la respuesta aceptada :
fuente
fuente
La respuesta de Wheat es buena, pero supone que no tiene pares de nombres de tabla / columna idénticos en ningún esquema o base de datos. Para que sea seguro para esa condición, use esto ...
fuente
Hay varias formas de verificar la existencia de una columna. Recomiendo encarecidamente usarlo
INFORMATION_SCHEMA.COLUMNS
ya que está creado para comunicarse con el usuario. Considere las siguientes tablas:e incluso algunos otros métodos de acceso disponibles para verificar
system catalog.
Además, no es necesario usar
SELECT *
, simplemente pruébeloNULL value
fuente
SELECT *
conEXISTS
, porque cuando se utiliza que existe en realidad no seleccionar todas las filas y todas las columnas, internamente que sólo comprueba la existencia y en realidad no comprueba todas las filas y columnasUna de las soluciones más simples y comprensibles es:
fuente
Aquí hay un script simple que uso para administrar la adición de columnas en la base de datos:
En este ejemplo,
Name
seColumnName
debe agregar el yObject_Id
es elTableName
fuente
La consulta a continuación se puede usar para verificar si la columna buscada existe o no en la tabla. Podemos tomar una decisión basada en el resultado buscado también como se muestra a continuación.
fuente
Otra variación más ...
fuente
table -> script table as -> new windows - tiene un script de diseño. verificar y encontrar el nombre de la columna en nuevas ventanas
fuente
Ejecute la consulta a continuación para verificar si la columna existe en la tabla dada:
fuente
Otra contribución es la siguiente muestra que agrega la columna si no existe.
Espero eso ayude. Simone
fuente
fuente
fuente
Haga algo si la columna no existe:
Haga algo si la columna existe:
fuente