使用参数更新OpenQuery

时间:2015-04-16 15:24:07

标签: sql oracle openquery

更新OPENQUERY帮助

我正在尝试通过SQL中的链接服务器更新Oracle 11表,现在链接服务器和select语句都显示正确,我认为我非常接近破解这个,但我遇到了更新问题。其他OPENQUERY命令正常工作,例如

SELECT * FROM OPENQUERY(LinkedServer, 'SELECT PL.place_id, PL.phy_svc_grp_b FROM OU_DBA.REQUEST RT INNER JOIN OU_DBA.PLACE PL ON RT.place_id = PL.place_id WHERE (RT.phy_svc_grp_b IS NULL) AND (PL.phy_svc_grp_b IS NOT NULL)')

这是按预期执行的;然后将此信息放入临时表中并使用WHILE创建更新openquery;

SET @TEMP_COUNT = (SELECT COUNT(*) FROM #MissingRegions)
            WHILE @TEMP_INDEX < @TEMP_COUNT +1
                BEGIN
                -----Clear out the SQL String
                SET @SQL_STRING = ''

                -----Assign the Place ID.
                SET @PLACE_ID = (SELECT PLACE_ID FROM #MissingRegions WHERE ID =@TEMP_INDEX)

                -----Assign the Region.
                SET @REGION = (SELECT GROUP_B FROM #MissingRegions WHERE ID =@TEMP_INDEX)

                SET     @SQL_STRING ='UPDATE OPENQUERY(LinkedServer, ''SELECT PHY_SVC_GRP_B FROM [OU_DBA].[REQUEST] WHERE PLACE_ID =''' + @PLACE_ID + ''')' + ' SET PHY_SVC_GRP_B = ''' + @REGION + ''''
                PRINT   @SQL_STRING
                EXEC        (@SQL_STRING)

            ----Increment the index value by 1
                SET @TEMP_INDEX = @TEMP_INDEX +1
        END

Print命令的输出返回以下内容:

UPDATE OPENQUERY(LinkedServer, 'SELECT PHY_SVC_GRP_B FROM [OU_DBA].[REQUEST] WHERE PLACE_ID ='ES5159') SET PHY_SVC_GRP_B = '1000'

但我不断为每个尝试更新的记录收到以下错误; Msg 102,Level 15,State 1,Line 1 ES5159&#39;附近的语法不正确。 消息105,第15级,状态1,第1行 字符串后面的未闭合的引号&#39;

如果有人可能会建议我可能出错的地方并为此提供解决方案,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您的输出需要如下所示:

UPDATE OPENQUERY(LinkedServer, 'SELECT PHY_SVC_GRP_B FROM [OU_DBA].[REQUEST] WHERE PLACE_ID =''ES5159''') SET PHY_SVC_GRP_B = '1000'

为此,请按以下方式设置字符串:

SET     @SQL_STRING ='UPDATE OPENQUERY(LinkedServer, ''SELECT PHY_SVC_GRP_B FROM [OU_DBA].[REQUEST] WHERE PLACE_ID =''''' + @PLACE_ID + ''''''')' + ' SET PHY_SVC_GRP_B = ''' + @REGION + ''''