zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    HashMap按键排序和按值排序
    LeetCode 91. Decode Ways
    LeetCode 459. Repeated Substring Pattern
    JVM
    LeetCode 385. Mini Parse
    LeetCode 319. Bulb Switcher
    LeetCode 343. Integer Break
    LeetCode 397. Integer Replacement
    LeetCode 3. Longest Substring Without Repeating Characters
    linux-网络数据包抓取-tcpdump
  • 原文地址:https://www.cnblogs.com/zhangpan1244/p/2670698.html
Copyright © 2011-2022 走看看