it-swarm.com.de

Verwenden Sie die CASE-Anweisung, um zu überprüfen, ob eine Spalte in der Tabelle SQL Server vorhanden ist

Ich verwende eine SQL Server -Anweisung, die in einen anderen C # -Code eingebettet ist. und möchte einfach nur prüfen, ob eine Spalte in meiner Tabelle vorhanden ist.

Wenn die Spalte (ModifiedByUSer hier) existiert, möchte ich ein 1 oder ein true zurückgeben; Wenn dies nicht der Fall ist, möchte ich ein oder ein false (oder etwas Ähnliches, das in C # interpretiert werden kann) zurückgeben.

Ich habe es soweit gebracht, eine CASE-Anweisung wie die folgende zu verwenden:

SELECT cast(case WHEN EXISTS (select ModifiedByUser from Tags) 
            THEN 0 
            ELSE 1 
            END as bit)

Aber wenn der ModifiedByUser nicht existiert, erhalte ich ein invalid column name anstelle des Rückgabewerts.

Ich habe auch überlegt:

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

Sie wissen jedoch nicht, wie Sie einen Wert/bool/bit basierend auf dem Ergebnis bedingt zurückgeben können. Jede Hilfe sehr geschätzt!

21

Die endgültige Antwort war eine Kombination aus zwei der oben genannten Punkte (ich habe beide positiv bewertet, um meine Wertschätzung zu zeigen!):

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
30
select case
         when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser')
         then 0
         else 1
       end
13
GSerg
SELECT *
FROM ...
WHERE EXISTS(SELECT 1 
        FROM sys.columns c
        WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
            AND c.name = 'ModifiedByUser'
    )
3
Mayank Awasthi

Probier diese -

SELECT *
FROM ...
WHERE EXISTS(SELECT 1 
        FROM sys.columns c
        WHERE c.[object_id] = OBJECT_ID('dbo.Tags')
            AND c.name = 'ModifiedByUser'
    )
2
Devart

Sie können die Tabelle 'Tabellenspaltenzuordnung' des Systems einchecken

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'
1
pratik garg