我正在尝试通过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;
如果有人可能会建议我可能出错的地方并为此提供解决方案,我将非常感激。
答案 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 + ''''