Tôi đang sử dụng sql-server 2005. Ban đầu, với mục đích học tập, tôi đã tạo ra nhiều bảng. hiện tại tôi đang làm việc. Có bất kỳ mã hoặc truy vấn nào mà tôi có thể bỏ tất cả các bảng khỏi cơ sở dữ liệu đó, ngoại trừ một bảng hữu ích. Một cách tôi nghĩ là sao chép bảng đó vào cơ sở dữ liệu mới bằng cách sử dụng mệnh đề SELECT INTO...
và thả cơ sở dữ liệu đó nhưng không biết đây có phải là cách hay để giải quyết vấn đề này không.Làm thế nào để thả tất cả các bảng từ một cơ sở dữ liệu trong máy chủ sql 2005 trong một tuyên bố ngoại trừ một bảng
Trả lời
Nếu các bảng không lớn lắm, có lẽ tôi chỉ cần chọn tất cả chúng trong cửa sổ "Object Explorer Details" trong SSMS rồi nhấn delete.
Đối với một giải pháp chương trình bạn có thể sử dụng
EXEC sys.sp_MSforeachtable
N'IF OBJECT_ID(''?'') <> OBJECT_ID(''dbo.YourTableToKeep'')
DROP TABLE ?
'
Cả hai phương pháp có thể cần chạy lặp đi lặp lại để xóa tất cả các bảng tham gia vào các mối quan hệ FK (một bảng không thể bị xóa nếu bảng khác có FK tham khảo nó).
Để xây dựng một chút về giải pháp giao diện người dùng: F7 là phím tắt chi tiết của trình khám phá đối tượng. Bạn không thể chọn nhiều đối tượng trong khung nhìn cây thám hiểm đối tượng, nhưng bạn có thể chọn nút Tables trong khung nhìn cây và nhấn F7 để hiển thị chi tiết Object Explorer. –
Bạn có thể sử dụng sql để tạo tất cả các vùng thả mà bạn cần. Ví dụ: truy vấn sql tiếp theo
USE [MyDatabase];
GO
SELECT
replace(
replace('DROP TABLE [{Schema}].[{TableName}];'
,'{Schema}',TABLE_SCHEMA)
,'{TableName}',TABLE_NAME)
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME NOT IN ('TableNameOne','TableNameTwo')
và nhận kết quả thực hiện truy vấn.
Sao chép cột đầu tiên của truy vấn và dán vào cửa sổ truy vấn mới.
Nó dễ dàng nhận thấy, rằng bạn sẽ có được một danh sách các Các tuyên bố thả cho tất cả các bảng trừ 'TableNameOne' và 'TableNameTwo', ...
Im nghĩ nó rất đơn giản ...
/* Drop all Foreign Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
WHILE @name is not null
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint IS NOT NULL
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']'
EXEC (@SQL)
PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all Primary Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
WHILE @name IS NOT NULL
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint is not null
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint)+']'
EXEC (@SQL)
PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all tables */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Table: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
điều này phục vụ nó! Cảm ơn – ben
- 1. Thả tất cả các bảng ngoại trừ một trong MySql
- 2. Làm thế nào để xóa tất cả các bảng trong cơ sở dữ liệu MySQL?
- 3. Cập nhật bảng cơ sở dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang bảng cơ sở dữ liệu SQL Server khác?
- 4. Làm thế nào để chọn dữ liệu của một bảng từ cơ sở dữ liệu khác trong SQL Server?
- 5. Sao chép bảng từ một cơ sở dữ liệu sang một cơ sở dữ liệu khác
- 6. Xóa tất cả trừ n trên cùng khỏi bảng cơ sở dữ liệu trong SQL
- 7. Đang cập nhật tất cả các bảng trong một cơ sở dữ liệu MySQL
- 8. SQL Server - Tạo Trigger đơn chạy cho TẤT CẢ các bảng trong cơ sở dữ liệu
- 9. Làm cách nào để đổi tên một cột trong bảng cơ sở dữ liệu bằng SQL?
- 10. Truy vấn hai bảng trong cơ sở dữ liệu riêng biệt trên cùng một máy chủ
- 11. Nhận Tất cả Ngoại trừ từ cơ sở dữ liệu SQL sử dụng Entity Framework
- 12. Làm thế nào để có được tất cả các tên bảng từ một cơ sở dữ liệu?
- 13. Sao chép dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang một bảng khác
- 14. Làm thế nào để thả tất cả các bảng trong cơ sở dữ liệu mà không làm rơi cơ sở dữ liệu?
- 15. Làm thế nào để xóa một hàng trong một bảng cơ sở dữ liệu sqlite?
- 16. Chọn nhiều số đếm từ một bảng cơ sở dữ liệu trong một lệnh sql
- 17. SQL Server Sao chép các bảng từ một cơ sở dữ liệu sang một cơ sở dữ liệu khác
- 18. Máy chủ SQL - Bảng siêu dữ liệu
- 19. tạo từ đồng nghĩa với bảng trong một cơ sở dữ liệu lưu trữ trong một máy chủ khác nhau
- 20. Mysql - tìm một bảng trong tất cả cơ sở dữ liệu
- 21. Xóa tất cả các hàng trong bảng khỏi bảng cơ sở dữ liệu SQLite
- 22. Cách xem tất cả các bảng trong cơ sở dữ liệu HSQLDB?
- 23. SQL - tạo cơ sở dữ liệu và các bảng trong một tập lệnh
- 24. INSERT dữ liệu từ một bảng vào nhiều bảng
- 25. SQL: Chèn dữ liệu từ bảng khác trong một bảng có chứa các phím nước ngoài
- 26. Làm thế nào để khóa tất cả các bảng trong một db mysql?
- 27. Chỉ đọc các hàng mới từ một bảng giống như log trong cơ sở dữ liệu
- 28. Làm thế nào để cấu hình một Stored Procedure để truy cập một bảng trong cơ sở dữ liệu khác
- 29. Đa hình trong các bảng cơ sở dữ liệu SQL?
- 30. cơ sở dữ liệu H2: đề cập đến một bảng trong schema gốc từ một ràng buộc khoá ngoại
Nếu các bảng không phải là rất lớn tôi có lẽ chỉ cần chọn tất cả trong cửa sổ "Object Explorer Details" trong SSMS sau đó nhấn xóa. –
Cảm ơn @MartinSmith đây là một cách tốt nhưng có cách nào mà tôi có thể làm điều tương tự bằng cách sử dụng báo cáo. – Manish