[英]Microsoft SQL Server 2012: How to Insert record into relational tables
有沒有辦法將記錄插入關系表,而不是為每個表運行查詢?
我需要插入一個新日志:l_WinUser,l_Status,t_StartTime,t_StartDate,其中username = username,g_Exe = g_Exe
如果是這樣在.NET中有一種方法來獲取插入的記錄ID? 目前我正在執行另一個查詢來檢索插入的日志(工作正常):
SELECT TOP (1) Logs.l_LogID
FROM Logs
INNER JOIN Game ON Logs.g_GameID = Game.g_GameID
INNER JOIN Member ON Logs.m_MemberID = Member.m_MemberID
WHERE (Game.g_Exe = @exe)
AND (Member.m_Username = @username)
AND (Logs.l_WinUser = @winUser)
ORDER BY Logs.l_LogID DESC
這是ERD:
非常感謝。
您可以創建一個VIEW,一個INSTEAD OF INSERT觸發器並對其運行一個INSERT
-Statement。
create View View_Logs
as
select l_WinUser,
l_Status,
t_StartTime,
1t_StartDate,
username,
g_Exe
FROM Logs
INNER JOIN Game ON Logs.g_GameID = Game.g_GameID
INNER JOIN Member ON Logs.m_MemberID = Member.m_MemberID
現在你插入這樣的新條目
insert into View_logs
(l_WinUser,l_status, lt_StartDate,username,g_exe)
values
('Foo', 1, GetDate(),'BarUser','SomeEXE')
您將使用新的l_LogID
select SCOPE_IDENTITY()
注意:在第一次嘗試中我寫了一個針對視圖的INSERT也會插入/更新相關表,但這不是真的。 所以我糾正了這個答案。
這是觸發器(未經測試):
create trigger YourTriggerName on View_ogs
for instead of insert
as
declare @GameID int, @MemberID int, @timeKey int
select @GameID=g_GameID from Game g join inserted i on g.g_Exe = i.g_exe
if @GameID is null begin
insert into Game (g_exe) select g_exe from Inserted
select @GameID = SCOPE_IDENTITY()
end
select @MemberID=m.m_memberID from Member m join inserted i on m_username = i.username
if @MemberID is null begin
insert into Member (m_username) select username from Inserted
select @MemberID = SCOPE_IDENTITY()
end
select @timeKey=t.t_timeKey
from Time_Date t
join inserted i
on t.t_StartTime=i.t_StartTime
and t.t_StartDate = t_StartDate
if @timeKey is null begin
insert into Time_Date (t_StartTime, t_StartDate) select t_StartTime, t_StartDate from Inserted
select @timeKey = SCOPE_IDENTITY()
end
set nocount off
insert into Logs
(l_WinUser, l_Status, m_MemberID, g_GameID, t_TimeKey)
select l_WinUser, l_Status, @MemberID, @GameID, @timekey)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.