[ virtualVoid @ 27.01.2010. 22:44 ] @
Hocu da sa nedokumentiranom procedurom sp_MSForEachTable drop-am sve tabele u testnoj bazi. Napisao sam tsql kod
Code:
EXEC sp_MSForEachTable 'DROP TABLE ? NOCHECK CONSTRAINT ALL'

ali mi se javlja greska
Citat:
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'NOCHECK'.

Gdje grijesim? Druge komande poput print (exec sp_MSforeachtable 'print ''?''' ) rade. Inace ovu komandu sam prepravio od originalne koja glasi ovako (ona samo brise podatke iz tabela)
Citat:
CREATE PROCEDURE sp_EmplyAllTable
AS
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘DELETE FROM ?’
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’
GO

PS. baza je na sql server 2008
[ virtualVoid @ 28.01.2010. 10:07 ] @
Pa zar stvarno nitko ne koristi ovu proceduru za brzo brisanje tabela iz baze?! Postoji li bolji nacin za brzo "praznjenje" baze od svih tabela?

Do sada sam koristio donju skriptu, ali ona je spora jer pobrise fk i onda stane pa moram raditi F5 dokle god se ne pobrise i zadnji fk.
Code:
USE "testbaza"
SELECT name INTO #tables from sys.objects where type = 'U'
while (SELECT count(1) FROM #tables) > 0
begin
declare @sql varchar(max)
declare @tbl varchar(255)
SELECT top 1 @tbl = name FROM #tables
SET @sql = 'drop table ' + @tbl
exec(@sql)
DELETE FROM #tables where name = @tbl
end
DROP TABLE #tables; 
[ mmix @ 28.01.2010. 10:13 ] @
Sto jednostavno ne skriptujes bazu, dropujes istu i rekreiras?
[ virtualVoid @ 28.01.2010. 10:21 ] @
Citat:
mmix: Sto jednostavno ne skriptujes bazu, dropujes istu i rekreiras?


Hm nisam db admin pa samim time nisam upoznat sa tvojom prvom izjavom "sto ne skriptujes bazu". Sta si mislio pod ovim?

U medjuvremenu mi je kolega poslao skriptu koja dropa sve tabele iz neke baze, prije toga uklanja sve fk-ove i jos ispisuje koje tabele su obrisane. Skripta se nalazi ispod
Code:
--brise i sve FKove
use imeTvojeBaze --pazi da ti ovdje ne ostane ime aktivne baze!!!!!!!!
declare @i int
set @i = 0
while (@i<99)
begin
   declare @table_name varchar(100)
   declare table_list cursor for
      select name from sysobjects o2 where xtype='U' and
         not exists (
            select * from sysforeignkeys k
               join syscolumns c1 on (k.fkeyid = c1.id and c1.colid=k.fkey)
               join syscolumns c2 on (k.rkeyid = c2.id and c2.colid=k.rkey)
            where c2.id = o2.id and c1.id <> o2.id
         )
   open table_list
   fetch next from table_list into @table_name   
   while @@fetch_status = 0
   begin
      print 'dropping table '[email protected]_name
      exec ('drop table '[email protected]_name)   
      fetch next from table_list into @table_name
   end   
   close table_list
   deallocate table_list
   set @i = @i+1
end
[ Fedya @ 28.01.2010. 10:39 ] @
Ne mogu da shvatim cemu toliko komplikovanje. Jednostavno uradis DROP DATABASE i kreiras je.
[ mmix @ 28.01.2010. 10:40 ] @


Ispratis wizard i tako generises SQL skriptu koja kreira izabrane objekte, cela sema baze (u sql 2008 cak i podaci) tako moze da se prebaci u SQL format i tako prenese ili sacuva. A ako ti je cilj samo da ubijes sve tabele u bazi, onda ti i skriptovanje ne treba, samo dropuj bazu ne vidim sto se maltretiras da obrises sve tabele?
[ virtualVoid @ 28.01.2010. 10:50 ] @
Citat:
Fedya: Ne mogu da shvatim cemu toliko komplikovanje. Jednostavno uradis DROP DATABASE i kreiras je.

ucis se pogresno. dosta online baza podataka ti nece dati dropanje i rekreiranje baze. pogotovo kada radis remote db administration. sta ces onda?

Citat:
mmix
Ispratis wizard i tako generises SQL skriptu koja kreira izabrane objekte, cela sema baze (u sql 2008 cak i podaci) tako moze da se prebaci u SQL format i tako prenese ili sacuva. A ako ti je cilj samo da ubijes sve tabele u bazi, onda ti i skriptovanje ne treba, samo dropuj bazu ne vidim sto se maltretiras da obrises sve tabele?

probat cu ovo. hvala!
[ Fedya @ 28.01.2010. 11:18 ] @
Ja sam ti rekao otprilike isto sto i mmix, samo sam za razliku od njega, podrazumevao da znas osnove SSMS-a.

Ako nemas prava da uradis backup/restore baze onda sa tom bazom nemoj ni raditi (ili bar ni slucajno nemoj pokusavati da obrises podatke iz takve baze ).
A ako mozes da uradsi restore mozes poterati create script (koji ti je mmix lepo, slikovito, objasnio) na bilo kom serveru i napraviti prazan backup i restoreovati ga preko tvoje baze gde ti je zabranjen drop

(a izjavu 'ucis se pogresno' necu da komentarisem )
[ Koce @ 28.01.2010. 11:34 ] @
Nemoj da radis drop i create, napunice ti log, uradi truncate, ako je to ono sto ti treba.