我从尝试创建的许多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
在其他语言中那样直接计算为true
或false
。实际上,您必须将它与另一个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
这给了我想要的结果,但只是在拔出我剩下的一点点头发之后。