J'utilise une instruction SQL server incorporée dans un autre code C #; et je veux simplement vérifier si une colonne existe dans ma table.
Si la colonne (ModifiedByUSer
ici) existe, alors je veux retourner un 1 ou un true; si ce n'est pas le cas, je veux retourner un ou un false (ou quelque chose de similaire qui peut être interprété en C #).
J'ai jusqu'à utiliser une instruction CASE comme celle-ci:
SELECT cast(case WHEN EXISTS (select ModifiedByUser from Tags)
THEN 0
ELSE 1
END as bit)
Mais si ModifiedByUser n'existe pas, je reçois un invalid column name
, au lieu de la valeur de retour.
J'ai également envisagé:
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
Mais je ne sais pas comment retourner conditionnellement une valeur/bool/bit en fonction du résultat. Toute aide très appréciée!
La réponse finale était une combinaison de deux des réponses ci-dessus (j'ai surévalué les deux pour montrer mon appréciation!):
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
select case
when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser')
then 0
else 1
end
SELECT *
FROM ...
WHERE EXISTS(SELECT 1
FROM sys.columns c
WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
AND c.name = 'ModifiedByUser'
)
Essaye celui-là -
SELECT *
FROM ...
WHERE EXISTS(SELECT 1
FROM sys.columns c
WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
AND c.name = 'ModifiedByUser'
)
Vous pouvez archiver la table du "mappage des colonnes de table" du système
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'