您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > 其实它就是将查询结果集以XML形式展现

其实它就是将查询结果集以XML形式展现

发布时间:2019-08-11 13:24编辑:威尼斯官方网站登录浏览(61)

       FO奥迪Q5 XML PATH ,其实它正是将查询结果集以XML方式表现,将多行的结果,映以后同一行。

        上面大家来写三个例证:

            就算我们有个干活流程表:

        图片 1图片 2

    CREATE TABLE [dbo].[Workflow_Action](
        [WorkflowSchema] [nvarchar](128) NULL,
        [ActionSchema] [nvarchar](128) NULL,
        [ActionName] [nvarchar](64) NULL
    )
    
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('material-price','confirm','审核通过')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('material-price','reject','审核驳回')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('material-price','executing','执行价格')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('material-price','non-executing','不执行价格')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('oa-meeting-apply','confirm','审核通过')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('oa-meeting-apply','reject','审核驳回')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('oa-officialSeal-apply','confirm','审核通过')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('oa-officialSeal-apply','reject','审核驳回')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('oa-officialSeal-apply','returned','归还公章')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','commit','提交审核')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','reject','采购驳回')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','confirm','审核通过')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','order','采购下单')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','recommit','重新提交审核')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','part-consignment','部分收货')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase','consignment','完成收货')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase-request','commit','提交审核')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase-request','confirm','审核通过')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase-request','reject','申请驳回')
    INSERT INTO [dbo].[Workflow_Action] ([WorkflowSchema],[ActionSchema],[ActionName]) VALUES ('purchase-request','recommit','重新提交审核')
    

    数据表和数码

        图片 3

     

        一、简介

          接下去,我们用那一个方法查询这一个表的多寡。

        select * from [dbo].[Workflow_Action] for xml path
          它可以将查询结果转换为一段XML格式的代码
    

        图片 4

       --for xml path 后面可以写东西,for xml path(Schema),这样写的话,可以将节点<row>变成<Schema>
        select WorkflowSchema as WS,ActionSchema as SC,ActionName as AN from [dbo].[Workflow_Action] for xml path('Schema')
    

           图片 5

        --我们还可以单独输出某一个字段的值
        SELECT '[ ' ActionName ' ]' FROM [dbo].[Workflow_Action] FOR XML PATH('')
    

        图片 6

     

        二、实际行使  

        --我们看看一个操作对应的而多格流程
        --一共是两层,里面一层查出单独的ActionName,拼成一行,然后使用where条件连接外层
        SELECT WorkflowSchema,
          (SELECT ActionName ',' FROM [dbo].[Workflow_Action] 
          WHERE WorkflowSchema=A.WorkflowSchema    --必须加的条件
          FOR XML PATH('')) AS ActionList
        FROM [dbo].[Workflow_Action] A 
        GROUP BY WorkflowSchema
        
    
        --where 连接条件必须要,如果去掉,就会查出所有的ActionName,如同上面示例一样
        
    
        --现在我们优化一下格式,会发现最后多了一个‘,’符号,用LEFT函数去掉他,继续在外面接一层查询
        select B.WorkflowSchema,
            LEFT(B.ActionList,LEN(B.ActionList)-1) as ActionList 
               from (
                     SELECT WorkflowSchema,
                       (SELECT ActionName ',' FROM [dbo].[Workflow_Action] 
                          WHERE WorkflowSchema=A.WorkflowSchema 
                         FOR XML PATH('')) AS ActionList
                    FROM [dbo].[Workflow_Action] A 
        GROUP BY WorkflowSchema) as B
    

         图片 7

     

       接下来,大家再讲三个别样的函数,完毕平等的机能,STUFF函数。

        sql stuff函数用于删除钦点长度的字符,并能够在制定的源点处插入另一组字符。sql stuff函数中只要伊始地方或长度值是负数,也许一旦初步地点大于第三个字符串的长短,将回到空字符串。假使要去除的长度当先第二个字符串的尺寸,将去除到第一个字符串中的第贰个字符。

        一、作用

          删除内定长度的字符,并在钦定的源点处插入另一组字符。

        二、语法

          STUFF ( character_expression , start , length ,character_expression )

            参数

            character_expression  贰个字符数听大人注明式。character_expression 可以是常量、变量,也足以是字符列或二进制数据列。

            start   贰个板寸值,钦赐删除和插入的初叶地方。若是start 或 length 为负,则赶回空字符串。如若 start 比第3个character_expression 长,则赶回空字符串。start 能够是 bigint 类型。

            length  贰个子弹头,钦命要删减的字符数。假若 length 比第二个 character_expression 长,则最多删除到终极四个character_expression 中的最终八个字符。length 能够是 bigint 类型。

            重临类型  

            如果 character_expression 是受辅助的字符数据类型,则赶回字符数据。要是 character_expression 是二个接受帮衬助的 binary 数据类型,则赶回二进制数据。

        三、备注

          1、即便开首地方或长度值是负数,恐怕只要起第壹人置大于第叁个字符串的尺寸,将重返空字符串。倘使要删减的长短超过第贰个字符串的长度,将去除到第一个字符串中的第一个字符。

          2、假诺结果值大于再次来到类型援助的最大值,则发出错误。

        四、sql stuff函数

        --实例一
         select STUFF('abcdefg',1,0,'1234')       --结果为'1234abcdefg'
         select STUFF('abcdefg',1,1,'1234')       --结果为'1234bcdefg'
         select STUFF('abcdefg',2,1,'1234')       --结果为'a1234cdefg'
         select STUFF('abcdefg',2,2,'1234')       --结果为'a1234defg'
    
        --实例二、SQL 将列转成字符串并用逗号分隔
        --同样的,我们也用到了for xml path这个方法
        SELECT STUFF((SELECT ','   ActionName FROM [dbo].[Workflow_Action] FOR XML PATH('')),1,1,'') AS WA
    

         图片 8

        --实例三、最后我们实现,上面for xml path的功能
        --先查出两个字段,然后对ActionName这个字段进行转化,where条件记得加上,不加就会显示出所有的ActionName
        select WorkflowSchema,
               ActionName=(STUFF((select ','   ActionName 
                                  from [dbo].[Workflow_Action] a 
                                  where a.WorkflowSchema=b.WorkflowSchema for xml path('')),1,1,''))    --where条件必须加上 
        from [dbo].[Workflow_Action] b group by WorkflowSchema
    

         图片 9

     

        比较以上两种做法,能够自动相比哪一种艺术越来越方便。

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:其实它就是将查询结果集以XML形式展现

    关键词:

上一篇:SQL Server 提供了九种定点服务器剧中人物

下一篇:没有了