2012-09-11 23 views
43

Tôi đang thử nghiệm và học tập với Microsoft SQL Server 2008 R2 SP1. Tôi có một cơ sở dữ liệu nơi tôi đã thực hiện nhiều thử nghiệm. Bây giờ tôi muốn thả và tạo lại nó. Vì vậy, tôi trích xuất các kịch bản tạo ra từ cơ sở dữ liệu, tôi xóa nó và tôi sử dụng kịch bản để tạo lại nó. Tôi ngạc nhiên, tất cả các bảng, khóa, v.v ... vẫn còn ở đó. Làm cách nào để thả cơ sở dữ liệu, để tôi có thể xây dựng lại cơ sở dữ liệu từ đầu?Rớt và tái tạo cơ sở dữ liệu trong Microsoft SQL Server

Trả lời

76
USE master 
IF EXISTS(select * from sys.databases where name='yourDBname') 
DROP DATABASE yourDBname 

CREATE DATABASE yourDBname 
+0

Bạn nói đúng, câu hỏi của tôi là ngu ngốc. Trong thực tế, các bảng mà tôi đã tiếp tục thấy được thực sự tạo ra trong cơ sở dữ liệu chủ, thay vì trong cơ sở dữ liệu của tôi. –

+0

Điều này đã giúp tôi rất nhiều! –

1

tôi trích xuất các kịch bản tạo ra từ cơ sở dữ liệu

này trích xuất các kịch bản sáng tạo cho tất cả mọi thứ trong cơ sở dữ liệu (bảng biểu, phím vv). Nếu bạn chỉ muốn tạo một cơ sở dữ liệu rỗng, chỉ cần chạy CREATE DATABASE <dbname>

22

+1 để AnandPhadke Về phần mình của mã

Mã này sẽ đóng tất cả các hoạt động kết nối đến cơ sở dữ liệu và sau đó thả nó

WHILE EXISTS(select NULL from sys.databases where name='YourDBName') 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' 
    FROM MASTER..SysProcesses 
    WHERE DBId = DB_ID(N'YourDBName') AND SPId <> @@SPId 
    EXEC(@SQL) 
    DROP DATABASE [YourDBName] 
END 
GO 

CREATE DATABASE YourDBName 
GO 
6

Yêu cầu DBName được nhập nhiều lần là dễ xảy ra lỗi, tại một số thời điểm nó sẽ được thực thi với các mục nhập không phù hợp và hậu quả không mong muốn.

Câu trả lời từ AnandPhadke hoặc Pierre với hỗ trợ biến sẽ được ưu tiên cho tôi.

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
USE master 
IF EXISTS(select * from sys.databases where name= @DBName) 
EXEC('DROP DATABASE ' + @DBName) 

EXEC('CREATE DATABASE ' + @DBName) 

hoặc

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
WHILE EXISTS(select NULL from sys.databases where name = @DBName) 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DBName) AND SPId <> @@SPId 
    EXEC(@SQL) 
    EXEC('DROP DATABASE ' + @DBName) 
END 
GO 
-1

này hoạt động tốt nhất cho tôi: (?)

if exists (select name from sys.databases where name='YourDBName') 
alter database YourDBName set single_user with rollback immediate 
go 
if exists (select name from sys.databases where name='YourDBName') 
drop database YourDBName 
+0

Điều này không thực sự trả lời câu hỏi. Nếu bạn có một câu hỏi khác, bạn có thể hỏi nó bằng cách nhấp vào [Hỏi câu hỏi] (http://stackoverflow.com/questions/ask). Bạn cũng có thể [thêm tiền thưởng] (http://stackoverflow.com/help/privileges/set-bounties) để thu hút thêm sự chú ý đến câu hỏi này khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/ whats-danh tiếng). - [Từ đánh giá] (/ review/low-quality-posts/12598382) –

+0

Tôi tin rằng bạn đã đánh giá sai câu trả lời này, @KhanImranAli. Điều này cố gắng trả lời, mặc dù kém. Điều này nên được kiểm duyệt bằng cách bỏ phiếu, không phải bằng cách gắn cờ và đánh giá tiêu cực. – Palec

+1

Vui lòng bao gồm giải thích về mã của bạn và cách nó trả lời câu hỏi. Nếu bạn nhận được một đoạn mã như một câu trả lời, bạn có thể không biết phải làm gì với nó. Câu trả lời nên cung cấp cho OP và hướng dẫn khách truy cập trong tương lai. Chỉ ra, ý tưởng đằng sau mã của bạn là gì, giúp hiểu rõ vấn đề và áp dụng hoặc sửa đổi giải pháp của bạn. – Palec

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