veritabanları bırakma ve yeniden oluşturma Microsoft SQL Server 2008 R2 SP1 ile deneme ve öğreniyorum. Birçok denemeler yaptığım bir veritabanım var. Şimdi onu bırakmak ve yeniden yaratmak istiyorum. Bu yüzden, oluşturma komut dosyasını veritabanından ayırıyorum, onu siliyorum ve yeniden oluşturmak için betiği kullanıyorum. Sürprizime göre, tüm masalar, anahtarlar vb. Veritabanını nasıl sıfırlayabilirim, böylece veritabanını sıfırdan yeniden oluşturabilir miyim?Microsoft SQL Server
cevap
USE master
IF EXISTS(select * from sys.databases where name='yourDBname')
DROP DATABASE yourDBname
CREATE DATABASE yourDBname
Ben Bu veritabanında her şeyi (masalar, anahtarlar vb) yönelik oluşturma komut dizisini veritabanı
den oluşturma komut dizisini. sadece boş bir veritabanı oluşturmak istiyorsanız, sadece kod rolünden dolayı AnandPhadke için CREATE DATABASE <dbname>
+1 çalıştırmak
sonra veritabanına tüm etkin bağlantıları kapatıp olacak Bu kod bunu
damlaWHILE 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
Birden çok kez yazılacak DBName gerekli olduğunda hata eğilimli, bir noktada tutarsız girişler ve istenmeyen sonuçlarla yürütülür.
AnandPhadke veya Pierre'in değişken destekli cevapları benim için tercih edilebilir.
DECLARE @DBName varchar(50) = 'YourDatabaseName'
USE master
IF EXISTS(select * from sys.databases where name= @DBName)
EXEC('DROP DATABASE ' + @DBName)
EXEC('CREATE DATABASE ' + @DBName)
veya
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
Bu benim için en iyi şekilde çalışır: (?)
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
Bu soruya gerçekten cevap vermiyor. Farklı bir sorunuz varsa, [Soru Sor] 'u tıklayarak sorabilirsiniz (http://stackoverflow.com/questions/ask). Yeterli [itibara] sahip olduğunuzda [http://stackoverflow.com/help/] de bu soruya daha fazla dikkat çekmek için [bir hediye] ekleyebilirsiniz (http://stackoverflow.com/help/privileges/set-bounties). neyin-itibar). - [Yorum Yaz] (/ review/düşük kaliteli yazılar/12598382) –
Bu cevabı yanlış yazdığınızı düşünüyorum, KhanImranAli. Bu, zayıf olsa da, cevap vermeye çalışır. Bu, işaretleme ve olumsuz inceleme yoluyla değil oylamayla yönetilmelidir. – Palec
Lütfen kodunuzun ne yaptığını ve bu soruya nasıl cevap verdiğini açıklayın. Bir kod snippet'ini cevap olarak alırsanız, bununla ne yapacağınızı bilmeyebilirsiniz. Cevap, OP ve gelecek ziyaretçilere rehberlik etmelidir. Konuya dikkat etmek gerekirse, kodunuzun ardındaki fikir, sorunu anlamada ve çözümünüzü uygulamada veya değiştirmede büyük ölçüde yardımcı olur. – Palec
SQL Server (ve üzeri) 2016 desteği bir satır ve atomik sözdizimi DROP DATABASE IF EXISTS database_name
REF : https://msdn.microsoft.com/en-us/library/ms178613.aspx
Haklısın, sorum benim için aptalcaydı. Aslında, görmeye devam ettiğim tablolar aslında veritabanımda değil, ana veritabanında oluşturuldu. –
Bu bana çok yardımcı oldu! –