WHERE子句使用OPENQUERY与链接服务器

时间:2013-12-12 14:10:00

标签: sql-server sql-server-2012

我通过ODBC连接 MS SQL Server Express 2012 数据库。

我的查询:

Select * from openquery(test,'SELECT * FROM Versuchsanlage_DB WHERE value =27')

SQL QUERY

但是这个查询

 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')

不起作用。为什么呢?

1 个答案:

答案 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];