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

你可能感兴趣的:(2008)