我是 SQL 和 XML 的新手,所以请多多包涵。我有一个查询,它获取输入到多行文本框中的值,将它们作为 xml 传递给声明的 @data xml 参数,然后分别将它们写入历史表和日记表。连同声明的其他参数。
所以,我的问题是,它首先被写入 Diary 表,其中该表中的 ID 是自动生成的,例如以下事项分别为 551 和 552,然后将信息插入到 History 表中。这不应该发生。
我希望首先将信息写入历史记录表,然后应将历史记录中相应事项的“自动生成”ID作为外键传递给日记表并插入列(DY_H_ID)。目前,该列没有填充数据,因为它只是后来添加的。
请在下面查看我的代码:
declare @U_ID varchar(50)
declare @Add_U_ID varchar(50)
declare @Subject varchar(50)
Declare @iPriority int
declare @data xml
declare @UN varchar(500)
declare @Date varchar(50)
declare @sDesc varchar(500)
set @U_ID = 18185
set @Add_U_ID = 18185 --'liihvcvbbbr43v55vx4wsk2x'
set @Subject = 'Bulk'
set @iPriority = 2
set @data = '<Matters>
<string>G0000010</string>
<string>G0000011</string>
</Matters>'
set @Date = '2013/08/23 17:00'
set @sDesc = 'Diary item added for : 2013/08/23 17:00 <br/>User : Tommy de Longe <br/> Bulk PAM'
select @UN = RTRIM(LTRIM(isNull(U_Name,'') + ' ' + isNull(U_Surname,''))) from Users with(nolock) where id = @U_ID
;with cte_Tmp ([MatterIDX], [MatterID]) as
(
select null, ParamValues.M_ID.value('.','VARCHAR(50)')
from @data.nodes('/Matters/string') as ParamValues(M_ID)
)
select Matter.M_IDX as M_IDX, [MatterID] as M_ID
into #TBL_Matter
from cte_Tmp
inner join Matter with(nolock) on cte_Tmp.[MatterID] = Matter.ID
Insert Into Dairy(DY_IDX,DY_MatterNo,DY_UserID,DY_Date,DY_Subject,DY_Priority)
select #TBL_Matter.M_IDX, #TBL_Matter.M_ID, @U_ID, @Date, @Subject, @iPriority
from #TBL_Matter
Insert into History(H_IDX, H_MID,H_UserID,H_Description,H_HA_ID,H_HSA_ID)
select #TBL_Matter.M_IDX, #TBL_Matter.M_ID, @Add_U_ID, Replace(Replace(Replace(@sDesc,'@UN', @UN),'@Date', @Date),'@Subject', @Subject), 7,19
from #TBL_Matter
drop table #TBL_Matter
我收到了要维护的代码,这让我很头疼。我知道我需要在查询底部切换两个插入,首先插入历史表,然后在这种情况下获取相应的自动生成的 ID(事项 G0000010,事项 G0000011)然后将这些值插入日记表. 有时用户可以在文本框中输入 20 个值,有时只能输入 2 个,所以它必须是动态的。
对此的任何帮助将不胜感激。提前致谢。