Requête SQL Server: get une list de colonnes qui n'existent pas dans le champ d'une autre table

Je dois sélectionner tous les noms de colonnes uniquement à partir d'une table SPLANNING_ROOMDATA2 de telle sorte que ces noms ne doivent pas exister dans une list de noms de colonne séparés par des virgules dans une autre table. Voici ma requête dans une application C # ASP.NET. Ma requête génère une erreur comme ' syntax error near Where '.

  SqlCommand cmd = new SqlCommand("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='Splanning_RoomData2' where COLUMN_NAME NOT IN (SELECT ATTRIBUTENAME FROM SPLANNING_RESTRICTED_ATTRIBUTES)", con);//get only column names 

Notez, si je supprime la deuxième clause Where , j'obtiens une list de colonnes mais ce n'est pas ce que je désire. J'ai fait quelques searchs mais aucune n'a répondu à mes besoins.

*** Edit: A partir de maintenant, aucune des réponses ne fonctionne. Je vais essayer de changer la table splanning_ressortingcted_atsortingbutes pour permettre une atsortingbution restreinte par ligne – au lieu de la virgule séparée. Merci a tous. **

Utilisez AND au lieu de WHERE deux fois

 SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Splanning_RoomData2' AND COLUMN_NAME NOT IN (SELECT ATTRIBUTENAME FROM SPLANNING_RESTRICTED_ATTRIBUTES)", con); 

Vous ne devez pas stocker des lists en tant que valeurs séparées par des virgules. Ils devraient être dans une table séparée, appelée une table de jonction avec une ligne par colonne et table.

Parfois, cependant, vous êtes coincé avec une telle structure. Voici une méthode pour get ce dont vous avez besoin:

 select c.COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS c LEFT JOIN SPLANNING_RESTRICTED_ATTRIBUTES ra ON ',' + lower(ra.ATTRIBUTENAME) + ',' LIKE '%,' + lower(c.column_name) + ',%' where TABLE_NAME = 'Splanning_RoomData2' and ra.ATTRIBUTENAME is null; 

Je viens de postr la réponse mise à jour de @Gordon Linoff répondre à la requête en tant que,

 select c.COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS c JOIN SPLANNING_RESTRICTED_ATTRIBUTES ra ON ',' + lower(ra.ATTRIBUTENAME) + ',' NOT LIKE '%,' + lower(c.column_name) + ',%' where c.TABLE_NAME = 'Splanning_RoomData2';