Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để bạn cắt ngắn tất cả các bảng trong cơ sở dữ liệu bằng TSQL?

Khi xử lý việc xóa dữ liệu khỏi bảng có mối quan hệ khóa ngoài - về cơ bản là trường hợp của bất kỳ cơ sở dữ liệu nào được thiết kế đúng cách - chúng ta có thể vô hiệu hóa tất cả các ràng buộc, xóa tất cả dữ liệu và sau đó bật lại các ràng buộc

-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"

-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"

-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

Tìm hiểu thêm về cách tắt các ràng buộc và trình kích hoạt tại đây

nếu một số bảng có cột nhận dạng, chúng tôi có thể muốn gửi lại chúng

EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"

Lưu ý rằng hoạt động của RESEED khác nhau giữa bảng hoàn toàn mới và bảng đã được chèn một số dữ liệu trước đó từ BOL:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

Giá trị nhận dạng hiện tại được đặt thành newReseedValue. Nếu không có hàng nào được chèn vào bảng kể từ khi nó được tạo, hàng đầu tiên được chèn sau khi thực thi DBCC CHECKIDENT sẽ sử dụng newReseedValue làm danh tính. Ngược lại, hàng tiếp theo được chèn sẽ sử dụng newReseedValue + 1. Nếu giá trị của newReseedValue nhỏ hơn giá trị chúng tối đa trong cột nhận dạng, thông báo lỗi 2627 sẽ được tạo trên các tham chiếu tiếp theo tới bảng.

Cảm ơn Robert đã chỉ ra thực tế rằng việc tắt các ràng buộc không cho phép sử dụng truncate, các ràng buộc sẽ phải được loại bỏ và sau đó được tạo lại



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể sử dụng SqlGeography với Linq to Sql không?

  2. Bỏ khóa ngoại mà không biết tên của ràng buộc?

  3. CROSS JOIN so với INNER JOIN trong SQL

  4. Làm cách nào để cắt bớt ngày giờ trong SQL Server?

  5. Câu lệnh CASE trong mệnh đề WHERE trong SQL Server 2008