我通过ODBC连接 MS SQL Server Express 2012 数据库。
我的查询:
Select * from openquery(test,'SELECT * FROM Versuchsanlage_DB WHERE value =27')
但是这个查询
Select * from openquery(test,
'SELECT * FROM Versuchsanlage_DB
WHERE identifier = AGENT.OBJECTS.Versuchsanlage.Variable_1_Byte')
OR
Select * from openquery(test,
'SELECT * FROM Versuchsanlage_DB
WHERE identifier = Variable_1_Byte')
不起作用。为什么呢?
答案 0 :(得分:7)
您正在identifier
列中搜索字符串值。字符串必须用引号括起来。由于select语句作为字符串传递给OPENQUERY
,因此必须对该字符串中的引号进行转义:
Select * from openquery(test,
'SELECT * FROM Versuchsanlage_DB
WHERE identifier = ''AGENT.OBJECTS.Versuchsanlage.Variable_1_Byte''')
OR
Select * from openquery(test,
"SELECT * FROM Versuchsanlage_DB
WHERE identifier = 'AGENT.OBJECTS.Versuchsanlage.Variable_1_Byte'")
这些查询在功能上是相同的,一个只使用所有单引号而另一个使用双引号。选择您认为更容易阅读的内容。
或者,您可以删除OPENQUERY
并使用EXECUTE...AT
语法进行参数化(这需要为链接服务器启用RPC):
EXECUTE('SELECT * FROM Versuchsanlage_DB WHERE identifier = ?',
'AGENT.OBJECTS.Versuchsanlage.Variable_1_Byte') AT [test];