web-dev-qa-db-ja.com

SQL Server 2008のストアドプロシージャを使用して、あるテーブルから別のテーブルに値を移動する

2つのテーブルがあります

  1. ログイン(ユーザーID、ユーザー名、パスワード)
  2. audit_login(userid、Transaction_Date、Status(successまたはfailed))

次に、ストアドプロシージャを作成します。誰もがログインしたい場合は、そのユーザーID、Transaction_DateとStatus(successまたはfailed)の詳細が自動的に別のテーブルaudit_loginに送られます。

次に、ログインが成功した回数を知りたいと思います。

5
user31595

Audit_loginテーブルに情報を記録するLoginテーブルのトリガーを使用して、要件を簡単に実装できます。

キーは、テーブルトリガーを使用して、監査用の監査テーブルに情報を記録します。

動作するコードを提供できるかどうかを確認します。しかし、あなたは今アイデアを得ました。


Update:以下は、参考になるプロトタイプコードです。

注:ストアドプロシージャは必要ありません。トリガーが機能します。

エラーを処理するために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

次に、いくつかのデータを挿入します。

-- 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'

以下は最終結果です:

Image

4
Kin Shah