Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Ne radi mi NOCHECK sa procedurom sp_MSForEachTable

  • 8 odgovora
  • 2.390 pregleda

Najnovija ↓

Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 27.01.2010. u 23:44 · pre 204 meseca #1
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
Potpis
...
Re: Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 28.01.2010. u 11:07 · pre 204 meseca #2
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; 
Potpis
...
Re: Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 28.01.2010. u 11:13 · pre 204 meseca #3
Sto jednostavno ne skriptujes bazu, dropujes istu i rekreiras?
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 28.01.2010. u 11:21 · pre 204 meseca #4
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 '+@table_name
      exec ('drop table '+@table_name)   
      fetch next from table_list into @table_name
   end   
   close table_list
   deallocate table_list
   set @i = @i+1
end
Potpis
...
Re: Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 28.01.2010. u 11:40 · pre 204 meseca #6


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?
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 28.01.2010. u 11:50 · pre 204 meseca #7
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!
Potpis
...
Re: Ne radi mi NOCHECK sa procedurom sp_MSForEachTable 28.01.2010. u 12:18 · pre 204 meseca #8
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 :D).
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 :D)
Potpis
Every hamster has his day.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme