Sql server 将Access查询的大小写转换为IIF
我似乎找不到如何将下面用T-SQL编写的查询转换为access查询,以便在vba中使用。我读过使用IIF而不是CASE的文章,因为Access的SQL不支持CASE,但尝试了许多不同的方法,但无法使其工作Sql server 将Access查询的大小写转换为IIF,sql-server,ms-access,vba,case,iif,Sql Server,Ms Access,Vba,Case,Iif,我似乎找不到如何将下面用T-SQL编写的查询转换为access查询,以便在vba中使用。我读过使用IIF而不是CASE的文章,因为Access的SQL不支持CASE,但尝试了许多不同的方法,但无法使其工作 sSQL = "SELECT ba.BusinessEntityID,ba.AddressID ,(CASE WHEN ba.BusinessEntityID > 5 THEN (SELECT pp.FirstName
sSQL = "SELECT ba.BusinessEntityID,ba.AddressID
,(CASE WHEN ba.BusinessEntityID > 5
THEN
(SELECT pp.FirstName FROM [Person].[Person] pp
WHERE pp.BusinessEntityID = ba.BusinessEntityID)
Else 'AA' END) AS 'TEST'
FROM Person.BusinessEntityAddress ba
INNER JOIN person.AddressType at ON at.AddressTypeID = ba.AddressTypeID
WHERE ba.BusinessEntityID < 11;"`
在尝试运行上述查询时,我得到如下错误消息
运行时错误3075语法错误查询中缺少运算符
当ba.BusinessEntityID>5时的表达式大小写,然后选择
pp.FirstName来自[Person].[Person]pp其中pp.BusinessEntityID=
ba.BusinessEntityID其他“AA”结束为“TEST”
IIF语法:
IIF(condition, if_true_part, if_false_part)
此外,如果没有MS Access中的AS,则不能使用假名
所以,试试下一步
sSQL = "SELECT ba.BusinessEntityID,ba.AddressID
,IIF(ba.BusinessEntityID > 5
,(SELECT pp.FirstName FROM Person pp
WHERE pp.BusinessEntityID = ba.BusinessEntityID)
,'AA') AS 'TEST'
FROM BusinessEntityAddress AS ba
INNER JOIN AddressType AS at ON at.AddressTypeID = ba.AddressTypeID
WHERE ba.BusinessEntityID < 11;"
还有两种其他方式:
1创建一个VBA函数,该函数将返回FirstName
2连接左侧或内部,您需要的是table PersonIIF语法:
IIF(condition, if_true_part, if_false_part)
此外,如果没有MS Access中的AS,则不能使用假名
所以,试试下一步
sSQL = "SELECT ba.BusinessEntityID,ba.AddressID
,IIF(ba.BusinessEntityID > 5
,(SELECT pp.FirstName FROM Person pp
WHERE pp.BusinessEntityID = ba.BusinessEntityID)
,'AA') AS 'TEST'
FROM BusinessEntityAddress AS ba
INNER JOIN AddressType AS at ON at.AddressTypeID = ba.AddressTypeID
WHERE ba.BusinessEntityID < 11;"
还有两种其他方式:
1创建一个VBA函数,该函数将返回FirstName
2向左或向内连接,使用Access时您需要的是table Person,请使用切换功能: 其他部分只是通过说明条件为真来完成
sSQL = "SELECT ba.BusinessEntityID, ba.AddressID,
SWITCH(ba.BusinessEntityID > 5,
(SELECT pp.FirstName FROM [Person].[Person]
WHERE pp.BusinessEntityID = ba.BusinessEntityID),
TRUE, 'AA') AS 'TEST'
FROM Person.BusinessEntityAddress ba
INNER JOIN person.AddressType at ON at.AddressTypeID = ba.AddressTypeID
WHERE ba.BusinessEntityID < 11"
使用Access时,请使用开关功能: 其他部分只是通过说明条件为真来完成
sSQL = "SELECT ba.BusinessEntityID, ba.AddressID,
SWITCH(ba.BusinessEntityID > 5,
(SELECT pp.FirstName FROM [Person].[Person]
WHERE pp.BusinessEntityID = ba.BusinessEntityID),
TRUE, 'AA') AS 'TEST'
FROM Person.BusinessEntityAddress ba
INNER JOIN person.AddressType at ON at.AddressTypeID = ba.AddressTypeID
WHERE ba.BusinessEntityID < 11"
谢谢你的答复。。但是,我在查询表达式IIFba.BusinessEntityID>5中遇到语法错误,请从[Person]中选择pp.FirstName![Person]pp其中pp.BusinessEntityID=ba.BusinessEntityID,'AA'。。如果IIF语句支持子查询,我找不到任何信息,这就是我来这里的原因。lol。如果没有,你能给我展示一个使用你提到的联接的示例吗?1你检查过表名吗?2.难道你忘了按要求写吗?如果。。。。作为测试?我已经检查过IIF1表名中的子查询是否正常工作,我已经通过使用debug检查sSQL进行了测试,然后将其粘贴到SQL Server SSMS 2中,我确实有[TEST],我甚至尝试过作为“TEST”和“TEST”或只是[TEST],但仍然没有运气……我不明白您对SQL Server的看法,但如果我像以前一样删除字段笔名,我会得到同样的错误。你能准确地粘贴你所使用的吗?我的意思是,我在SQL Server中测试了这个查询,结果很好。谢谢你的回复。。但是,我在查询表达式IIFba.BusinessEntityID>5中遇到语法错误,请从[Person]中选择pp.FirstName![Person]pp其中pp.BusinessEntityID=ba.BusinessEntityID,'AA'。。如果IIF语句支持子查询,我找不到任何信息,这就是我来这里的原因。lol。如果没有,你能给我展示一个使用你提到的联接的示例吗?1你检查过表名吗?2.难道你忘了按要求写吗?如果。。。。作为测试?我已经检查过IIF1表名中的子查询是否正常工作,我已经通过使用debug检查sSQL进行了测试,然后将其粘贴到SQL Server SSMS 2中,我确实有[TEST],我甚至尝试过作为“TEST”和“TEST”或只是[TEST],但仍然没有运气……我不明白您对SQL Server的看法,但如果我像以前一样删除字段笔名,我会得到同样的错误。你能准确地粘贴你所使用的吗?我的意思是,我在SQL Server中测试了该查询,它工作正常。Access将不接受来自[Person].[Person]、Person.BusinessEntityAddress或Person.AddressType的查询。仅使用Access中显示的表名,不使用架构或数据库名限定表名。我是通过SQL Server Native Client 11.0执行此操作的。。我使用Set db=OpenDatabaseAdventureWorks,False,False,sConnStr。我还试着把它们改成FROM[个人]![人],来自[人]![BusinessEntityAddress],以及来自[Person]![AddressType]此简单查询是否与您尝试修复的查询在相同的上下文中工作?从Person.BusinessEntityAddress中选择ba.*BAHMMMMM,它不起作用。。。我发现错误运行时3024找不到文件“C:\Users\…”,但从[BusinessEntityAddress]中选择*是否有效该查询存在多个问题。建议您在查询的其余部分正常工作之前忽略大小写。Access是否接受这一点而没有任何抱怨?从BusinessEntityAddress中选择ba.BusinessEntityID,ba.AddressID。在at.AddressTypeID=ba.AddressTypeID中,ba.BusinessEntityID<11的位置处选择ba.BusinessEntityID,ba.AddressID;访问将不接受来自[Person].[Person]、Person.BusinessEntityAddress或Person.AddressType的访问。仅使用Access中显示的表名,不使用架构或数据库名限定表名。我是通过SQL Server Native Client 11.0执行此操作的。。我使用Set db=OpenDatabaseAdventureWorks,False,False,sConnStr。我还试着把它们改成FROM[个人]![人],来自[人]![BusinessEntityAddress],以及来自[Person]![AddressType]此简单查询是否与您尝试修复的查询在相同的上下文中工作?从Person.BusinessEntityAddress中选择ba.*BAHMMMMM,它不起作用。。。我得到了错误的答案
n-Time 3024找不到文件“C:\Users\…”,但从[BusinessEntityAddress]中选择*是否有效该查询存在多个问题。建议您在查询的其余部分正常工作之前忽略大小写。Access是否接受这一点而没有任何抱怨?从BusinessEntityAddress中选择ba.BusinessEntityID,ba.AddressID。在at.AddressTypeID=ba.AddressTypeID中,ba.BusinessEntityID<11的位置处选择ba.BusinessEntityID,ba.AddressID;谢谢你的答复。。但是,我得到的语法错误与我在上面的评论中得到的语法错误相同。。查询表达式IIFba.BusinessEntityID>5出错,请从[Person]中选择pp.FirstName![Person]pp其中pp.BusinessEntityID=ba.BusinessEntityID,'AA'@xJustin8-此答案中没有IIF。。。你确定你复制了他的area9解决方案吗?谢谢你的回复。。但是,我得到的语法错误与我在上面的评论中得到的语法错误相同。。查询表达式IIFba.BusinessEntityID>5出错,请从[Person]中选择pp.FirstName![Person]pp其中pp.BusinessEntityID=ba.BusinessEntityID,'AA'@xJustin8-此答案中没有IIF。。。你确定你复制了他的区域9的解决方案吗?