通过sql server 2008中的存储过程将值从一个表移动到另一个表

use*_*595 5 sql-server-2008 stored-procedures insert

我有两张桌子

  1. 登录(用户名、用户名、密码)
  2. audit_login (userid, Transaction_Date, Status (success or failed)

现在我想创建一个存储过程,如果有人想登录,那么他们的用户 ID、Transaction_Date 和状态(成功或失败)详细信息应该自动进入另一个表 audit_login。

然后我想知道登录成功了多少次。

Kin*_*hah 4

您可以使用登录表上的触发器轻松实现您的要求,该触发器将在audit_login 表中记录信息。

关键是使用表触发器将信息记录到审计表中进行审计。

我会看看是否可以提供工作代码。但你现在明白了。


更新:下面是一个可以帮助您的原型代码。

注意:您不需要任何存储过程,触发器即可完成这项工作。

你可以用 try/catch 来处理错误,我没有这样做,因为这只是为了帮助你理解这个概念。

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Logins]') AND type in (N'U'))
DROP TABLE [dbo].[Logins]
GO
create table Logins (userid varchar(15) not null
                        ,username varchar(max)
                        ,[password] varchar(50)
                        ,[status] varchar(1)) -- S = Success, F= Fail
go

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[audit_login]') AND type in (N'U'))
DROP TABLE [dbo].[audit_login]
GO
SELECT [userid],[username],[status]  
    ,AuditDataState=CONVERT(VARCHAR(10),'')   
    ,AuditDMLAction=CONVERT(VARCHAR(10),'')    
    ,AuditUser =CONVERT(SYSNAME,'')  
    ,AuditDateTime=CONVERT(DATETIME,'01-JAN-1900')  
    into dbo.audit_login  
FROM dbo.Logins  
WHERE 1=2 

go                      
CREATE TRIGGER Logins_Insert 
ON dbo.Logins  
FOR INSERT  
AS  

 INSERT INTO dbo.audit_login  
 SELECT [userid],[username],[status],'New','Insert',SUSER_SNAME(),getdate()  FROM INSERTED   

GO  
CREATE TRIGGER Logins_Delete  
ON dbo.Logins  
FOR DELETE  
AS  

 INSERT INTO dbo.audit_login  
 SELECT [userid],[username],[status],'Old','Delete',SUSER_SNAME(),getdate()  FROM DELETED   
GO

CREATE TRIGGER Logins_Update  
ON dbo.Logins  
FOR UPDATE  
AS  

 INSERT INTO dbo.audit_login  
 SELECT [userid],[username],[status],'New','Update',SUSER_SNAME(),getdate()  FROM INSERTED   

 INSERT INTO dbo.audit_login  
 SELECT [userid],[username],[status],'Old','Update',SUSER_SNAME(),getdate()  FROM DELETED   

GO
Run Code Online (Sandbox Code Playgroud)

现在插入一些数据:

-- Insert New Data
insert into Logins
values ('kin001', 'kin','$tr0ng01','s') 

select * from audit_login

-- Update the current Data
update Logins
set userid = 'kin-up-01'
where userid = 'kin001'

select * from audit_login

-- delete the data
delete from Logins
where userid = 'kin-up-01'
Run Code Online (Sandbox Code Playgroud)

下面将是最终结果:

图像