Phi*_*p88 4 sql-server sql-server-2012
我通过ODBC 连接MS SQL Server Express 2012数据库.
我的查询:
Select * from openquery(test,'SELECT * FROM Versuchsanlage_DB WHERE value =27')
Run Code Online (Sandbox Code Playgroud)

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