• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

SQL Server xóa dữ liệu có liên kết Table ?

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

dong
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 596
Ngày tham gia: T.Năm 03/04/2008 7:46 am
Has thanked: 12 time
Been thanked: 1 time

SQL Server xóa dữ liệu có liên kết Table ?

Gửi bàigửi bởi dong » T.Tư 13/09/2017 3:07 pm

Giả sử mình có 2 Table: TABHDBH và TABHDBHCT
Table TABHDBH có các trường sau:
NGAY DateTime;
IDHDBH int
...

Table IDHDBHCT có các trường sau:
MAHDBH int
...

Mã: Chọn hết

DELETE FROM TABHDBH INNER JOIN
                      dbo.TABHDBHCT ON dbo.TABHDBH.IDHDBH = dbo.TABHDBHCT.MAHDBH
WHERE     (CONVERT(varchar, NGAY, 101) <= '04/16/2015')


Hỏi: hai Table này nối với nhau qua TABHDBH.IDHDBH = TABHDBHCT.MAHDBH, mình muốn xóa có điều kiện theo ngày qua Table TABHDBH bởi trường ngày, khi xóa ngày trên Table TABHDBH có mã IDHDBH = MAHDBH thì các liên kết với Table TABHDBHCT cũng xóa theo. Vấn tin xóa dữ liệu ở trên của mình không xóa được bị báo lỗi ? mình muốn xóa trường hợp này mình sửa vấn tin như thế nào ?



FlyingFox
Guru
Guru
Bài viết: 768
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 310 time

Re: SQL Server xóa dữ liệu có liên kết Table ?

Gửi bàigửi bởi FlyingFox » T.Tư 13/09/2017 5:25 pm

Vào INSERT And UPDATE Specification cũa foreign key đó set Delete Rule thành Cascade.

dong
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 596
Ngày tham gia: T.Năm 03/04/2008 7:46 am
Has thanked: 12 time
Been thanked: 1 time

Re: SQL Server xóa dữ liệu có liên kết Table ?

Gửi bàigửi bởi dong » T.Năm 21/09/2017 3:56 pm

Mình cũng vào quan hệ Table đặt Delete Rule thành Cascade nhưng khi chạy vấn tin tại SQL Server vẫn báo lỗi ? vấn tin SQL ở trên của mình sai thì phải ?

FlyingFox
Guru
Guru
Bài viết: 768
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 310 time

Re: SQL Server xóa dữ liệu có liên kết Table ?

Gửi bàigửi bởi FlyingFox » T.Năm 21/09/2017 6:09 pm

Viết theo kiểu này thữ xem
  1. DELETE T1
  2. FROM TABHDBH T1
  3. INNER JOIN TABHDBHCT T2 ON T1.IDHDBH = T2.MAHDBH
  4. WHERE (CONVERT(VARCHAR, NGAY, 101) <= '04/16/2015')

dong
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 596
Ngày tham gia: T.Năm 03/04/2008 7:46 am
Has thanked: 12 time
Been thanked: 1 time

Re: SQL Server xóa dữ liệu có liên kết Table ?

Gửi bàigửi bởi dong » T.Sáu 22/09/2017 9:36 am

1. vấn tin của bạn xóa được rồi nhưng giờ mình làm thêm trường hợp 3 TABLE có liên kết với nhau, xem mô tả ở dưới.

2. cũng từ ví dụ trên mình bổ sung thêm TABHDBHCHUYEN có các trường sau:
TABHDBHCHUYEN
NGAYCHUYEN datetime
MAHDBH int
...

quan hệ của 3 TABLE
TABHDBHCHUYEN.MAHDBH đầu n
TABHDBH.IDHDBH đầu 1
TABHDBHCT.MAHDBH đầu n

Mã: Chọn hết

DELETE T1
FROM TABHDBHCHUYEN T1
INNER JOIN TABHDBH T2 ON T1.MAHDBH = T2.IDHDBH INNER JOIN
           TABHDBHCT T3 ON T2.IDHDBH = T3.MAHDBH
WHERE (CONVERT(VARCHAR, NGAYCHUYEN, 101) <= '01/07/2017')


Khi chạy vấn tin không bị báo lỗi chỉ xóa mẫu tin trong TABHDBHCHUYEN còn các mẫu tin trong 2 TABLE còn lại không xóa được, bạn xem giúp mình vấn tin sai gì ? đã tạo table quan hệ cho 3 table để chế độ Delete Rule thành Cascade nhưng không xóa được.

FlyingFox
Guru
Guru
Bài viết: 768
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 310 time

Re: SQL Server xóa dữ liệu có liên kết Table ?

Gửi bàigửi bởi FlyingFox » CN 24/09/2017 1:42 pm

Bời vì bảng chánh là TABHDBH nên chỉ cần viết là
  1. DELETE
  2. FROM TABHDBH
  3. WHERE (CONVERT(VARCHAR, NGAYCHUYEN, 101) <= '01/07/2017')


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách