2010-02-11 40 views
29

Tôi có một trang web sử dụng lược đồ thành viên asp.net. Tôi muốn thiết lập một kích hoạt trên bảng aspnet_users đã chèn user_id và user_name của hàng mới vào một bảng khác.Sql Server kích hoạt các giá trị chèn từ hàng mới vào một bảng khác

Tôi làm cách nào để nhận các giá trị từ lần chèn cuối cùng?

Tôi có thể chọn ngày cuối cùng đã được xử lý nhưng dường như có mùi. Có cách nào tốt hơn?

+0

cảm ơn cho câu trả lời tất cả mọi người nhanh chóng. – jim

Trả lời

54

thử này cho máy chủ sql

CREATE TRIGGER yourNewTrigger ON yourSourcetable 
FOR INSERT 
AS 

INSERT INTO yourDestinationTable 
     (col1, col2 , col3, user_id, user_name) 
    SELECT 
     'a' , default , null, user_id, user_name 
     FROM inserted 

go 
+2

Lưu ý một sự khác biệt giữa nội dung tôi hiển thị và những gì HLGEM hiển thị là tôi đã cung cấp mã để hiển thị cách xử lý các cột trong bảng mới ngoài các cột được kéo từ INSERTED: "a" sử dụng hằng số theo nghĩa đen "mặc định" hoặc "null" để nó không được xác định –

+1

Lưu ý rằng nếu 2 bảng giống nhau, bạn thậm chí không cần liệt kê các tên cột. Rất tiện dụng để lưu trữ bản sao chỉ đọc tĩnh của một bảng cho các bản ghi có thể thay đổi sau này. –

3

Bạn có thể sử dụng OLDNEW trong trình kích hoạt để truy cập các giá trị đã thay đổi trong trình kích hoạt đó. Mysql Ref

+3

Ông _did_ chỉ định MS SQL, không phải MySql – Oded

+3

Ông đã không khi Teja đăng phản hồi. Chưa kể, nó không bao giờ đau khi biết các phương pháp tương tự cho các hệ thống khác. – cmsjr

+0

Đó là MS Sql, nó đã được chỉnh sửa để SQL Server, như cmsjr nói ... nó không làm tổn thương. – jim

4

Khi bạn ở trong ngữ cảnh của trình kích hoạt, bạn có quyền truy cập vào bảng logic INSERTED chứa tất cả các hàng vừa được chèn vào bảng. Bạn có thể xây dựng chèn của bạn vào bảng khác dựa trên một lựa chọn từ chèn.

12

Bạn sử dụng trình kích hoạt chèn - bên trong trình kích hoạt, mục hàng được chèn sẽ được hiển thị dưới dạng bảng logic INSERTED, có bố cục cột giống như bảng kích hoạt được xác định.

Xóa trình kích hoạt có quyền truy cập vào bảng logic tương tự được gọi là DELETED.

Trình kích hoạt cập nhật có quyền truy cập vào cả bảng INSERTED chứa các giá trị được cập nhật và bảng DELETED chứa các giá trị cần cập nhật.

5

Trong trình kích hoạt SQL Server, bạn có sẵn hai psdeuotables được gọi là chèn và xóa. Chúng chứa các giá trị cũ và mới của bản ghi.

Vì vậy, trong vòng cò (bạn có thể tra cứu các phần tạo kích hoạt một cách dễ dàng), bạn sẽ làm điều gì đó như thế này:

Insert table2 (user_id, user_name) 
select user_id, user_name from inserted i 
left join table2 t on i.user_id = t.userid 
where t.user_id is null 

Khi viết trigger nhớ họ hành động một lần trên toàn bộ lô thông tin, họ không xử lý từng hàng một. Vì vậy, tài khoản cho chèn nhiều hàng trong mã của bạn.

+2

Lưu ý một sự khác biệt giữa nội dung tôi hiển thị và KM hiển thị là tôi đã cung cấp cho bạn mã để đảm bảo bản ghi chưa tồn tại trong bảng 2. Cô ấy cho biết cách xử lý các trường bắt buộc khác ngoài các trường bạn đã có sẵn trong chèn nếu có. – HLGEM

+0

ok, cảm ơn vì đã làm rõ. Tôi đánh giá cao thời gian của bạn. – jim

Các vấn đề liên quan