我有一个表,它的一些列是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]值
的那些感谢
答案 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' “循环视图中的限定符。