Tsql 在varchar列上使用大小写时发生转换错误

Tsql 在varchar列上使用大小写时发生转换错误,tsql,sql-server-2012,Tsql,Sql Server 2012,我正试图获取信息发送到谷歌图表,以获取我正在查看的Active列的图形,该列可以是真/假,但在我的数据库中设置为varchar 使用此查询: SELECT SUM(CASE WHEN CONVERT(int, Active) Active = 1 THEN 1 ELSE 0 END) AS Active, SUM(CASE WHEN CONVERT(int, Active) Active = 0 THEN 1 ELSE 0 END) AS Inactive FROM E

我正试图获取信息发送到谷歌图表,以获取我正在查看的
Active
列的图形,该列可以是真/假,但在我的数据库中设置为varchar

使用此查询:

SELECT
    SUM(CASE WHEN CONVERT(int, Active) Active = 1 THEN 1 ELSE 0 END) AS Active,
    SUM(CASE WHEN CONVERT(int, Active) Active = 0 THEN 1 ELSE 0 END) AS Inactive
FROM 
    Events
抛出此错误:

将varchar值“True”转换为数据类型int时,转换失败`


整数不是布尔数。。。。它们在SQL Server中称为bit。尝试

SELECT
SUM(CASE WHEN CONVERT(bit, Active) = 1 THEN 1 ELSE 0 END) AS Active,
SUM(CASE WHEN CONVERT(bit, Active) = 0 THEN 1 ELSE 0 END) AS Inactive
FROM Events
或者只是测试你的字符串

SELECT
SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END) AS Active,
SUM(CASE WHEN Active = 'False' THEN 1 ELSE 0 END) AS Inactive
FROM Events

另外,将布尔值存储为字符串列是愚蠢的。。。考虑将列更改为位列,这样就不需要转换它

< p> int不是布尔值。它们在SQL Server中称为bit。尝试

SELECT
SUM(CASE WHEN CONVERT(bit, Active) = 1 THEN 1 ELSE 0 END) AS Active,
SUM(CASE WHEN CONVERT(bit, Active) = 0 THEN 1 ELSE 0 END) AS Inactive
FROM Events
或者只是测试你的字符串

SELECT
SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END) AS Active,
SUM(CASE WHEN Active = 'False' THEN 1 ELSE 0 END) AS Inactive
FROM Events

另外,将布尔值存储为字符串列是愚蠢的。。。考虑将列更改为位列,这样您甚至不需要转换它

为什么<代码>活动< /COD>不是一个位-而是VARCHAR列?转换为位而不是int,并且应该work@TimSchmelter应该是的,但现在我已经建立了一个完整的系统,我害怕更改类型,因为它可能会影响我应用程序中的许多其他位置。为什么
处于活动状态
不是一个bit-而是varchar列?转换为bit而不是int,它应该work@TimSchmelter应该是的,但现在我已经建立了一个完整的系统,我害怕更改类型,因为它可能会影响我的应用程序上的许多其他位置。这给了我一个
非布尔类型的表达式,该表达式是在预期条件的上下文中指定的,接近“Active”。
这只是因为您不能在子查询中对列进行别名。。。删除行中的第二个活动项作为“我的查找”完成编辑,这确实有效。将在12分钟后接受。谢谢。如果您需要显示
True
转换为
字符串
,但不要将其作为文本存储在表中,请用另一种方式执行。@TimSchmelter-是。。。。这正是我的建议,我说“考虑将列更改为位列”,这给了我
一个非布尔类型的表达式,该表达式在预期条件的上下文中指定,接近“Active”。
这只是因为您不能在子查询中为列别名。。。删除行中的第二个活动项作为“我的查找”完成编辑,这确实有效。将在12分钟后接受。谢谢。如果您需要显示
True
转换为
字符串
,但不要将其作为文本存储在表中,请用另一种方式执行。@TimSchmelter-是。。。。这正是我所说的‘考虑将列更改为一个小列’的建议