SQL2008 操作XML 单字段 变量

  1 USE [NF_UserData]
  2 GO
  3 SET ANSI_NULLS ON
  4 GO
  5 SET QUOTED_IDENTIFIER ON
  6 GO
  7 -- =============================================
  8 -- Author:        IsaacZhang
  9 -- Create date: 2012-09-04
 10 -- Description:    创建插入hubble索引中间表数据的触发器
 11 -- =============================================
 12 CREATE TRIGGER  Trigger_UserDataBibliography_Insert 
 13    ON  Bibliography
 14    AFTER INSERT
 15 AS 
 16 BEGIN
 17     /*声明需要到的变量@hubbleID int,*/
 18     DECLARE 
 19      @BibliographyId uniqueidentifier,
 20      @BibliographyIntId  int,--暂时没有这个字段
 21      @Title  varchar(255),
 22      @AuthorsXml  XML, --需要处理
 23      @Authors varchar(500),--等待XML文件处理完成后写入字段
 24      @SharePersonName   varchar (100),--暂时无这个
 25      @ShareDate   datetime ,
 26      @Media   varchar (255),
 27      @IsFullFile   bit ,--需要在外键中处理
 28      @FileId uniqueidentifier,--获取全文ID
 29      @SharePersonId   int ,--暂时无这个
 30      @BibAbstract   nvarchar (max),
 31      @DOI   nvarchar (128),
 32      @PubulishYear   int ,
 33      @Volume   nvarchar (32),
 34      @Issue   nvarchar (32),
 35      @PageScope   nvarchar (50),
 36      @PageCount   int ,
 37      @TagStr   nvarchar (1000),--外键表中找
 38      @TagIDStr   nvarchar (1000),--外键表中找,与标签字串一一对应
 39      @Keywords    nvarchar(1000),--
 40      @KeywordsXML    XML,
 41      @UserID uniqueidentifier
 42      
 43      --从插入记录中取出一部分数据
 44      SELECT @BibliographyId = BibliographyId,@Title=Title,@AuthorsXml=CAST(Authors AS XML)
 45      ,@UserID =UserID,@ShareDate = ShareDate,@Media=Media,@BibAbstract = Abstract
 46      ,@DOI=DOI,@PubulishYear = [Year],@Volume = Volume,@Issue = Issue
 47      ,@PageScope = PageScope,@PageCount= [PageCount],@KeywordsXML=CAST(Keywords AS XML)
 48       FROM INSERTED
 49         
 50      --判断是否有全文
 51      SET @IsFullFile = 0
 52      DECLARE @i INT
 53      SELECT @i = COUNT(0)FROM NPU_File.dbo.[File] WHERE FileId = @FileId
 54      IF @i>0
 55          SET @IsFullFile = 1
 56      --转换作者信息
 57      SET @Authors = '';
 58      DECLARE @isHas INT;
 59      select  @isHas = @AuthorsXml.exist('declare default element namespace "http://services.notefirst.com/Type/Author";//FullName');
 60      IF @isHas > 0
 61      BEGIN 
 62          --声明一个游标
 63         DECLARE authorCursor CURSOR    
 64         FOR 
 65         select T.C.value('declare default element namespace "http://services.notefirst.com/Type/Author";(../FullName)[1]','varchar(200)'
 66         as authorstr
 67         from @AuthorsXml.nodes('declare default element namespace "http://services.notefirst.com/Type/Author";(//FullName)'as T(C)
 68         OPEN authorCursor
 69         --循环一个游标
 70         DECLARE @tempAuthor NVARCHAR(50);
 71         FETCH NEXT FROM  authorCursor INTO @tempAuthor
 72         WHILE @@FETCH_STATUS = 0
 73         BEGIN
 74         --拼接作者信息,用逗号隔开
 75         SET @Authors += @tempAuthor+',';
 76         FETCH NEXT FROM  authorCursor INTO @tempAuthor
 77         END  
 78          SET @Authors = substring(@Authors,1,len(rtrim(@Authors))-1)
 79         --关闭游标
 80         CLOSE authorCursor
 81         --释放资源
 82         DEALLOCATE authorCursor
 83         
 84      END -- 结束作者信息IF
 85      
 86      --查看标签信息
 87      SET @TagIDStr = '';
 88      SET @TagStr = '';
 89      IF(SELECT COUNT(0FROM dbo.[Relationship-Bibliography^SysTag] WHERE BibliographyId=@BibliographyId)>0
 90      BEGIN
 91         DECLARE tagCursor CURSOR    
 92         FOR SELECT TagId FROM dbo.[Relationship-Bibliography^SysTag] WHERE BibliographyId=@BibliographyId
 93         OPEN tagCursor
 94         --循环一个游标
 95         DECLARE @tempTag NVARCHAR(50),@tempTagID NVARCHAR(50);
 96         FETCH NEXT FROM  tagCursor INTO @tempTagID
 97         WHILE @@FETCH_STATUS = 0
 98         BEGIN
 99             SET @TagIDStr += @tempTagID+',';
100             SET @TagStr += @tempTag+',';
101         END
102         SET @TagIDStr = substring(@TagIDStr,1,len(rtrim(@TagIDStr))-1)
103         SET @TagStr = substring(@TagStr,1,len(rtrim(@TagStr))-1)
104         --关闭游标
105         CLOSE tagCursor
106         --释放资源
107         DEALLOCATE tagCursor
108      END
109      
110      --查询关键词信息
111      SET @Keywords = '';
112      DECLARE @KeywordsTemp nvarchar(50);
113      DECLARE @isHasKeywords INT;
114      select  @isHasKeywords = @KeywordsXml.exist('//string');
115      IF @isHasKeywords > 0
116      BEGIN 
117         --统计有多少关键词
118          DECLARE @countKeyword Int;
119         SET  @countKeyword = 0;
120         select @countKeyword = T.S.value('count(//string)','Int'
121         from @KeywordsXml.nodes('//ArrayOfString'as T(S)
122         WHILE @countKeyword>0
123         BEGIN
124             
125             select @KeywordsTemp = T.S.value('(//string[sql:variable( "@countKeyword")])[1]','Int'
126             from @KeywordsXml.nodes('//ArrayOfString'as T(S)
127             
128             SET @Keywords += @KeywordsTemp+','
129             SET @countKeyword = @countKeyword-1;
130         END
131         SET @Keywords = substring(@Keywords,1,len(rtrim(@Keywords))-1)
132      END -- 结束关键词信息IF
133      
134      INSERT INTO dbo.Hubble_UserDataBibliography
135             ([BibliographyId]
136            ,[BibliographyIntId]
137            ,[Title]
138            ,[Authors]
139            ,[SharePersonName]
140            ,[ShareDate]
141            ,[Media]
142            ,[IsFullFile]
143            ,[FileId]
144            ,[SharePersonId]
145            ,[BibAbstract]
146            ,[DOI]
147            ,[PubulishYear]
148            ,[Volume]
149            ,[Issue]
150            ,[PageScope]
151            ,[PageCount]
152            ,[TagStr]
153            ,[TagIDStr]
154            ,[Keywords]
155            ,[UserID])
156            VALUES(@BibliographyId,
157            0,
158            @Title,
159            @Authors,
160            '',
161            @ShareDate,
162            @Media,
163            @IsFullFile,
164            @FileId,
165            0,
166            @BibAbstract,
167            @DOI,
168            @PubulishYear,
169            @Volume,
170            @Issue,
171            @PageScope,
172            @PageCount,
173            @TagStr,
174            @TagIDStr,
175            @Keywords,
176            @UserID);
177 END
178 
179 GO
原文地址:https://www.cnblogs.com/zhangpan1244/p/2670698.html