w3schools - Use la sentencia CASE para verificar si existe una columna en la tabla-SQL Server
sql case example (5)
La respuesta final fue una combinación de dos de los anteriores (¡he votado a los dos para mostrar mi agradecimiento!):
select case
when exists (
SELECT 1
FROM Sys.columns c
WHERE c.[object_id] = OBJECT_ID(''dbo.Tags'')
AND c.name = ''ModifiedByUserId''
)
then 1
else 0
end
Estoy usando una declaración del servidor SQL incrustada en algún otro código C #; y simplemente quiero comprobar si existe una columna en mi tabla.
Si la columna ( ModifiedByUSer
aquí) existe, quiero devolver un 1 o un verdadero ; si no es así, quiero devolver un 0 o un falso (o algo similar que pueda interpretarse en C #).
He llegado a usar una sentencia CASE como la siguiente:
SELECT cast(case WHEN EXISTS (select ModifiedByUser from Tags)
THEN 0
ELSE 1
END as bit)
Pero si el ModifiedByUser no existe, obtengo un invalid column name
, en lugar del valor de retorno.
También he considerado:
IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''Tags'' AND COLUMN_NAME = ''ModifiedByUser'')
BEGIN // Do something here to return a value
END
Pero no sé cómo devolver condicionalmente un valor / bool / bit en función del resultado. Cualquier ayuda muy apreciada!
Prueba este
SELECT *
FROM ...
WHERE EXISTS(SELECT 1
FROM sys.columns c
WHERE c.[object_id] = OBJECT_ID(''dbo.Tags'')
AND c.name = ''ModifiedByUser''
)
Puede consultar en la tabla de ''asignación de columnas de la tabla'' del sistema
SELECT count(*)
FROM Sys.Columns c
JOIN Sys.Tables t ON c.Object_Id = t.Object_Id
WHERE upper(t.Name) = ''TAGS''
AND upper(c.NAME) = ''MODIFIEDBYUSER''
SELECT *
FROM ...
WHERE EXISTS(SELECT 1
FROM sys.columns c
WHERE c.[object_id] = OBJECT_ID(''dbo.Tags'')
AND c.name = ''ModifiedByUser''
)
select case
when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''Tags'' AND COLUMN_NAME = ''ModifiedByUser'')
then 0
else 1
end