declare @customers xml
set @customers='<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1'' /><cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />'INSERT tb_ExternalEnterprise(BPNo,EnterpriseId,EnterpriseName)
SELECT R.c.value('@bpNo','CHAR(6)'),R.c.value('@MNo','VARCHAR(50)'),
       R.c.value('@MName','NVARCHAR(30)')
 FROM @customers.nodes('cus') R(c)请问我可以将该操作转换成一个sql语句吗?因为我想在程序中动态执行sql语句,而不想使用存储过程。谢谢

解决方案 »

  1.   

    看来是吃饱了没事做,你当作语句,然后替换xml内容部分就可以了
      

  2.   

    你把这段当做SQL语句放你程序里INSERT tb_ExternalEnterprise(BPNo,EnterpriseId,EnterpriseName)
    SELECT R.c.value('@bpNo','CHAR(6)'),R.c.value('@MNo','VARCHAR(50)'),
      R.c.value('@MName','NVARCHAR(30)')
     FROM @customers.nodes('cus') R(c)这里的@customers是你程序传来的参数,拼接下就OK了。
      

  3.   

    ]
    如何拼接?我这样写不行的。
    SELECT R.c.value('@bpNo','CHAR(6)'),R.c.value('@MNo','VARCHAR(50)'),
           R.c.value('@MName','NVARCHAR(30)')
     FROM cast('<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1'' /><cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />' as xml).nodes('cus') R(c)
      

  4.   

    declare @customers xml
    set @customers='<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1'' /><cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />'INSERT tb_ExternalEnterprise(BPNo,EnterpriseId,EnterpriseName)
    SELECT R.c.value('@bpNo','CHAR(6)'),R.c.value('@MNo','VARCHAR(50)'),
      R.c.value('@MName','NVARCHAR(30)')
     FROM @customers.nodes('cus') R(c)
      

  5.   

    C#里可以用declare这个关键字吗?还真没见人这么干过!!
      

  6.   

    你用什么前端语言?
    直接去运行你自己测试下,可以的话替换
    set @customers='<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1'' /><cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />'部分就可以实现按程序输入替换了
      

  7.   

    set @customers='<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1'' /><cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />'这种语句只有在数据库的存储过程或者函数里才能使用吧,如果在.net或者java也能这么用的话,那还要存储过程做什么。SELECT R.c.value('@bpNo','CHAR(6)'),R.c.value('@MNo','VARCHAR(50)'),
           R.c.value('@MName','NVARCHAR(30)')
     FROM cast('<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1'' /><cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />' as xml).nodes('cus') R(c)我把变量放到sql语句里这样不行。不知道有没有可行的方法?
      

  8.   

    SELECT b.*
     FROM (select cast('<cus bpNo=''15'' MNo=''商户ID1'' MName=''商户名称1''/>
         <cus bpNo=''15'' MNo=''商户ID2'' MName=''商户名称2'' />' as xml) a)t
    cross apply(select R.c.value('@bpNo','CHAR(6)') as bpNo,
                       R.c.value('@MNo','VARCHAR(50)') as MNo,
                       R.c.value('@MName','NVARCHAR(30)') as MName
                from t.a.nodes('cus') R(c)) b/*
    bpNo   MNo                                                MName
    ------ -------------------------------------------------- ------------------------------
    15     商户ID1                                              商户名称1
    15     商户ID2                                              商户名称2(2 行受影响)
      

  9.   

            public virtual string GetSql(string xmlstr)
            {
                return "declare @customers xml \r\n" +
                    "set @customers='" + xmlstr + "  \r\n" +
                    "INSERT tb_ExternalEnterprise(BPNo,EnterpriseId,EnterpriseName) \r\n" +
                    "  SELECT R.c.value('@bpNo','CHAR(6)'),R.c.value('@MNo','VARCHAR(50)'),\r\n" +
                    "  R.c.value('@MName','NVARCHAR(30)')\r\n" +
                    "  FROM @customers.nodes('cus') R(c)\r\n" 
            }写一个这样的过程,应该知道怎么用了吧
      

  10.   

    在C#,不管SQL语句多长,是否定义变量,全部是字符串操作,有什么影响?