我需要从 SPLANNING_ROOMDATA2 表中选择所有名称列,这些名称不应存在于另一个表中以逗号分隔的列名称列表中。这是我在 C# ASP.NET 应用程序中的查询。我的查询生成类似“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
请注意,如果我删除第二个 Where
子句,那么我会得到一个列列表,但这不是我想要的。我进行了一些搜索,但没有一个能满足我的需求。
***编辑:截至目前,所有答案均无效。我将尝试更改 splanning_restricted_attributes 表以允许每行一个受限制的属性——而不是逗号分隔的属性。谢谢大家。 **
您不应将列表存储为逗号分隔值。它们应该在一个单独的表中,称为联结表,每列和表一行。
不过,有时您会受困于这种结构。这是获取所需内容的一种方法:
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;
我是一名优秀的程序员,十分优秀!