SQL Server FOR XML PATH 和 STUFF函数的用法

   FOR XML PATH
,其实它就是将查询结果集以XML形式展现,将多行的结果,展示在同一行。

1、作用

sql
STUFF用法

    下面我们来写一个例子:

删除指定长度的字符,并在指定的起点处插入另一组字符。

1、作用

        假设我们有个工作流程表:

2、语法

删除指定长度的字符,并在指定的起点处插入另一组字符。

    图片 1图片 2

STUFF ( character_expression , start , length ,character_expression )

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、示例

STUFF ( character_expression , start , length ,character_expression )

数据表和数据

以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符
b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串

3、示例

    图片 3

SELECT STUFF(‘abcdef’, 2, 3, ‘ijklmn’)
GO

以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符
b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串

 

下面是结果集

SELECT STUFF(‘abcdef’, 2, 3, ‘ijklmn’)
GO

    一、简单介绍

aijklmnef

下面是结果集

      接下来,我们用这个方法查询这个表的数据。

4、参数
character_expression

aijklmnef

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

一个字符数据表达式。character_expression
可以是常量、变量,也可以是字符列或二进制数据列。

4、参数
character_expression

    图片 4

start

一个字符数据表达式。character_expression
可以是常量、变量,也可以是字符列或二进制数据列。

   --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')

一个整数值,指定删除和插入的开始位置。如果 start 或 length
为负,则返回空字符串。如果 start 比第一个
character_expression长,则返回空字符串。start 可以是 bigint 类型。

start

     
 图片 5

length

一个整数值,指定删除和插入的开始位置。如果 start 或 length
为负,则返回空字符串。如果 start 比第一个
character_expression长,则返回空字符串。start 可以是 bigint 类型。

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

一个整数,指定要删除的字符数。如果 length 比第一个
character_expression长,则最多删除到最后一个 character_expression
中的最后一个字符。length 可以是 bigint 类型。

length

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website