Nếu tôi có 2 bảng, hãy gọi chúng là TableA và TableB. TableB chứa một khóa ngoại, tham chiếu đến TableA. Bây giờ tôi cần thêm dữ liệu vào cả TableA và TableB cho một kịch bản nhất định. Để làm điều này, trước tiên tôi phải chèn dữ liệu vào TableA sau đó tìm và lấy khóa chính được chèn cuối cùng của TableA và sử dụng nó làm giá trị khóa ngoài trong TableB. Sau đó tôi chèn các giá trị trong TableB. Điều này có vẻ giống như một chút để làm việc chỉ để chèn 1 bộ dữ liệu. Làm cách nào khác tôi có thể đạt được điều này? Nếu có thể, vui lòng cung cấp cho tôi các câu lệnh SQL cho SQL Server 2005.Làm cách nào để thêm dữ liệu vào hai bảng được liên kết thông qua khóa ngoại?
Trả lời
Điều đó nghe có vẻ đúng. Lưu ý rằng bạn có thể sử dụng SCOPE_IDENTITY()
trên cơ sở mỗi hàng hoặc bạn có thể thực hiện các hoạt động dựa trên thiết lập nếu bạn sử dụng cú pháp INSERT/OUTPUT và sau đó tham gia tập hợp đầu ra từ lần chèn đầu tiên - ví dụ, ở đây chúng tôi chỉ có 1 CHERTN (mỗi) vào các bảng "thực":
/*DROP TABLE STAGE_A
DROP TABLE STAGE_B
DROP TABLE B
DROP TABLE A*/
SET NOCOUNT ON
CREATE TABLE STAGE_A (
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE STAGE_B (
CustomerKey varchar(10),
OrderNumber varchar(100))
CREATE TABLE A (
Id int NOT NULL IDENTITY(51,1) PRIMARY KEY,
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE B (
Id int NOT NULL IDENTITY(1123,1) PRIMARY KEY,
CustomerId int,
OrderNumber varchar(100))
ALTER TABLE B ADD FOREIGN KEY (CustomerId) REFERENCES A(Id);
INSERT STAGE_A VALUES ('foo', 'Foo Corp')
INSERT STAGE_A VALUES ('bar', 'Bar Industries')
INSERT STAGE_B VALUES ('foo', '12345')
INSERT STAGE_B VALUES ('foo', '23456')
INSERT STAGE_B VALUES ('bar', '34567')
DECLARE @CustMap TABLE (CustomerKey varchar(10), Id int NOT NULL)
INSERT A (CustomerKey, Name)
OUTPUT INSERTED.CustomerKey,INSERTED.Id INTO @CustMap
SELECT CustomerKey, Name
FROM STAGE_A
INSERT B (CustomerId, OrderNumber)
SELECT map.Id, b.OrderNumber
FROM STAGE_B b
INNER JOIN @CustMap map ON map.CustomerKey = b.CustomerKey
SELECT * FROM A
SELECT * FROM B
Nếu bạn làm việc trực tiếp với SQL bạn có giải pháp đúng.
Trong trường hợp bạn thực hiện chèn từ mã, bạn có thể có cấu trúc cấp cao hơn giúp bạn đạt được điều này (LINQ, Mô hình Django, v.v.).
Nếu bạn định thực hiện điều này trong SQL trực tiếp, tôi khuyên bạn nên tạo một thủ tục lưu trữ lấy tất cả dữ liệu làm tham số, sau đó thực hiện chèn/chọn nhận dạng/chèn bước bên trong giao dịch. Mặc dù quá trình này vẫn giống như quy trình chèn thủ công của bạn, việc sử dụng quy trình được lưu trữ sẽ cho phép bạn dễ dàng sử dụng nó hơn từ mã của bạn. Vì @Rax đề cập đến, bạn cũng có thể sử dụng ORM để có được chức năng tương tự.
- 1. Làm cách nào để khóa ngoại quốc vào bảng?
- 2. Thêm khóa ngoại vào bảng hiện có
- 3. Chèn dữ liệu vào các bảng được liên kết bằng khóa ngoài
- 4. Làm cách nào để thêm thông số vào liên kết đến URL bên ngoài?
- 5. Thêm dữ liệu bổ sung vào bảng kết nối - Rails
- 6. Làm cách nào để liên kết dữ liệu trong MongoDB?
- 7. Làm cách nào để thêm khóa ngoại vào bảng SQLite hiện có?
- 8. has_many: thông qua khóa ngoại?
- 9. DELETE dữ liệu từ một bảng, tham gia thông qua hai bảng
- 10. Làm cách nào để kiểm tra các bảng được liên kết với khóa ngoài?
- 11. Làm thế nào để tìm một Khóa Ngoại của một bảng thông qua T-SQL?
- 12. Cách liên kết bảng trong bộ dữ liệu với dữ liệu WPF trong C# và XAML
- 13. Làm thế nào để kết hợp hai bảng dữ liệu và đặt kết quả
- 14. Dữ liệu đọc (plist nhúng) được liên kết với thực thi thông qua -sectcreate __TEXT
- 15. Làm cách nào để kết hợp dữ liệu từ hai bảng riêng biệt vào một Con trỏ đơn?
- 16. Làm cách nào để thêm cột được tính vào Bảng?
- 17. Cần dữ liệu từ bảng nối ray, has_many: thông qua
- 18. Làm thế nào để loại bỏ ràng buộc đầu vào được thêm vào thông qua CommandManager.RegisterClassInputBinding?
- 19. Làm cách nào tôi có thể thêm liên kết hợp chất theo cách thủ công vào khung thực thể?
- 20. cách thêm khóa chính vào bảng trong đường ray
- 21. Liên kết hai tài liệu Office
- 22. Cách dễ dàng để "thêm" hai bảng lớn vào R?
- 23. Làm thế nào để thêm hai cột mới vào cơ sở dữ liệu SQLite của Android?
- 24. Làm cách nào để "chuỗi" các bảng được liên kết trong Access?
- 25. Làm cách nào để thêm các mục vào gtk.ComboBox được tạo thông qua glade khi chạy?
- 26. Làm cách nào để gửi dữ liệu đến trang PHP khi nhấp vào một Liên kết?
- 27. Làm thế nào để liên kết từ Postgresql đến SQL Server thông qua ODBC?
- 28. Trong backbone.js làm cách nào để liên kết khóa với tài liệu
- 29. Làm cách nào để thêm target = "_ blank" vào liên kết trong div được chỉ định?
- 30. Làm cách nào để liên kết khóa với "hàm được trình bày bằng chuỗi khóa sau"?
Cảm ơn Marc ... đây chính xác là những gì tôi đang tìm kiếm ... Đó là dấu trang thường trực của tôi. –