在sql server中使用open xml执行存储过程时出错

时间:2010-06-09 10:41:32

标签: sql sql-server openxml

我执行以下存储过程。但它显示错误。错误是  ''。'附近的语法不正确。即错误显示在'xmlFields.Country'中  请查看此存储过程并提前帮助我

create procedure sp_SuUpdateSUADUsersStatus
(
    @FinalEMPCode nvarchar(50),
    @xmlFields NTEXT 
)
AS  
DECLARE @CityIDReturn INT
SET NOCOUNT ON  
BEGIN  
 DECLARE @hdoc INT  

 EXEC sp_xml_preparedocument @hdoc OUTPUT, @xmlFields

          BEGIN
         EXEC @CityIDReturn=sp_SuSaveADUsersLocation @Country=xmlFields.Country,
          xmlFields.State,xmlFields.City
         FROM OPENXML(@hDoc, 'EmpCode/User', 2)   WITH 
         (Country nvarchar(500),State nvarchar(500),City nvarchar(500))
         as xmlFields
         where xmlFields.Country <>'' and xmlFields.State <>'' and xmlFields.City   
                 <>'')
      END



    EXEC sp_xml_removedocument @hdoc


End

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试为结果集的每一行执行存储过程。你不能这样做。你需要

1)使用游标逐行处理。

2)创建一个EXEC语句的连接列表到nvarchar(max)变量中,然后可以用sp_executesql执行,或者

3)理想情况下,使用存储过程中的逻辑,但是以基于集合的方式对照OPENXML SELECT的结果。

答案 1 :(得分:1)

你不能这样做 @Country=xmlFields.Country

尝试以下代码

  EXEC @CityIDReturn=sp_SuSaveADUsersLocation xmlFields.Country,
          xmlFields.State,xmlFields.City

如果你想为每个记录执行程序使用sql cursor实现

,你就不能执行这样的程序