您的位置:首页 > 数据库

SQL2008 操作XML 单字段 变量

2012-09-04 17:10 295 查看
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(0) FROM 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: