Sql server SQL Server 2008选择具有特定数据的特定列

Sql server SQL Server 2008选择具有特定数据的特定列,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一个表,它的一些列是位数据类型。我只需要选择值为[TRUE]的[BIT]数据类型列 我使用以下代码仅从给定表中选择[BIT]列 SELECT OBJECT_NAME(c.OBJECT_ID) TableName, c.name ColumnName FROM sys.columns AS c JOIN sys.types AS t ON c.user_type_id= t.user_type_id JOIN sys.all_objects as o ON

我有一个表,它的一些列是
数据类型。我只需要选择值为
[TRUE]
[BIT]
数据类型列

我使用以下代码仅从给定表中选择
[BIT]

SELECT 
    OBJECT_NAME(c.OBJECT_ID) TableName, c.name ColumnName
FROM 
    sys.columns AS c
JOIN 
    sys.types AS t ON c.user_type_id= t.user_type_id
JOIN
    sys.all_objects as o ON o.object_id = c.object_id
WHERE 
    t.name = 'bit' 
    AND o.name = 'TABLENAME' --this is the table name
ORDER BY 
    c.OBJECT_ID
GO
请告诉我如何仅选择那些具有[TRUE]值的


谢谢

这是办不到的。Sys架构只包含有关数据库中对象的信息,而不包含有关表中记录的信息


唯一可能做到这一点的方法是获取您拥有的信息,循环遍历数据库中的每个表名,打开上面引用的视图返回的每个表,并使用“WHERE ColumnName‘NULL’”循环视图中的限定符。

您可以在查询中使用动态sql和临时表,将位类型的列的值返回为true或false。 希望这有帮助

DECLARE @SQL nvarchar(max)
SET @SQL='DECLARE @TempTable table (Value bit,Table_Column nvarchar(500))'
SELECT @SQL=@SQL+';INSERT @TempTable (Value,Table_Column) SELECT '+c.name + ','' '+c.name + ' - ' + o.name + 
     ''' FROM ['
         +o.name + ']' 
         FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id=t.user_type_id
join sys.all_objects as o on o.object_id = c.object_id
WHERE t.name = 'bit' 
and o.name = 'TABLENAME' --this is the table name
ORDER BY c.OBJECT_ID -- columns

SET @SQL=@SQL+';SELECT Table_Column,Value= CASE Value WHEN 0 THEN ''False'' When 1 THEN ''True'' end FROM @TempTable;' 
print @SQL
EXEC (@SQL)

列没有值-记录有值。它可能有助于提供示例数据和预期结果。
sys
架构中的表为表提供元数据,但不包含表的行数据。如果要查询表中的数据,您需要返回到表中。是的,我知道,我需要知道如何执行。您不能在一个
选择
…内将有关列的元数据(列的名称和数据类型)与表中列的实际值混合在一起,因为我可以看出这是无法完成的。投票删除这个问题?我提供的示例代码仅供参考,并且我知道sys模式只包含关于对象的信息。我需要知道它是否有用,就像我说的,您可以使用返回的表名,这样您就可以确切地知道要检查哪些表和列。但是,您仍然需要遍历数据库并查询每个表,以了解该列是否设置为True或False。这绝对是一个正确的起点。如何将对象名[系统名]与查询返回的varchar值进行比较可能有点混乱,但您可以创建一个游标。我不知道,你可能需要把列名放入数组?我知道您可以通过将上面的内容替换到这里给出的示例中来循环代码:请看“在游标中使用WHILE”部分。作为最后的手段,我尝试了您的解决方案,但您非常出色。你做得比我预期的好。我现在需要的只是在代码中添加一些where子句。非常感谢。