SSMS 错误 "An expression of non-boolean type specified in a context where a condition is expected, nea



我从尝试创建的许多SQL Server视图中得到标题错误。它们是从我正在升级的MS Access数据库中修改的,以使用SQL作为后端。请参阅下面的SQL:

SELECT        dbo.Site_Info_All.SiteID, 
IIf(dbo.Site_Info_All.Fixed_Charge, N'Yes', N'No') AS [Fixed Charge], 
dbo.Site_Info_All.Fixed_Charge_Date, dbo.MG_Definition.MG_Definition
FROM            dbo.MG_Definition INNER JOIN
dbo.Site_Info_All ON dbo.MG_Definition.MG_DefinitionID = 
dbo.Site_Info_All.MG_DefinitionID

看起来好像有人告诉我Fixed_Charge字段不是布尔值,只是它是布尔值。我在多个视图中遇到了这个问题。我做错了什么?

它不是boolean。它是bit.:(

bit列不会像bool在其他语言中那样直接计算为truefalse。实际上,您必须将它与另一个bit值进行比较才能返回布尔值。

declare @bit bit = 1;
if (@bit) print '@bit was true'; -- this does not work
if (@bit = 1) print '@bit = 1 was true'; -- this works

你想要的是:

... IIf(dbo.Site_Info_All.Fixed_Charge = 1, N'Yes', N'No') ...
SELECT       dbo.Site_Info_All.SiteID, 
IIf(dbo.Site_Info_All.Fixed_Charge = 1, N'Yes', N'No') AS [Fixed Charge], 
dbo.Site_Info_All.Fixed_Charge_Date, 
dbo.MG_Definition.MG_Definition
FROM         dbo.MG_Definition 
INNER JOIN   dbo.Site_Info_All ON dbo.MG_Definition.MG_DefinitionID = dbo.Site_Info_All.MG_DefinitionID

最后,我决定IIF根本不起作用。顺便说一句,对此的回答将是非常受欢迎的

我使用

SELECT        dbo.Site_Info_All.SiteID, 
CASE WHEN dbo.Site_Info_All.Fixed_Charge = 1 
THEN N'Yes' 
ELSE N'No' 
END AS [Fixed Charge], dbo.Site_Info_All.Fixed_Charge_Date, 
dbo.MG_Definition.MG_Definition
FROM          dbo.MG_Definition INNER JOIN
dbo.Site_Info_All ON dbo.MG_Definition.MG_DefinitionID = 
dbo.Site_Info_All.MG_DefinitionID

这给了我想要的结果,但只是在拔出我剩下的一点点头发之后。

相关内容

最新更新