SQL Server 2008选择某些列具有特定数据

时间:2013-08-20 19:27:29

标签: sql-server sql-server-2008

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

我有以下代码只选择给定表中的[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]值

的那些

感谢

2 个答案:

答案 0 :(得分:2)

您可以在查询中使用动态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)

答案 1 :(得分:1)

这不可能。 Sys模式仅包含有关数据库中对象的信息,而不包含表中的记录。

可能执行此操作的唯一方法是获取您拥有的信息并遍历数据库中的每个表名,打开上面引用的视图返回的每个表,并使用“WHERE ColumnName<>'NULL' “循环视图中的限定符。