when w3schools then switch hacer example ejemplos cómo sql sql-server case

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