Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Brisanje podataka iz baze ms sql

[es] :: MS SQL :: Brisanje podataka iz baze ms sql

[ Pregleda: 4031 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Brisanje podataka iz baze ms sql02.07.2008. u 14:20 - pre 158 meseci
Imam podignut ms sql server 2000 na racunaru i bazu u njemu. Zanima me kako mogu izbrisati sve podatle iz baze i nastaviti sa radom bez predhodno unetih podataka? Tu bazu koristi program radjen u visual basicu u pitanju je platforma asp.net web aplikacija.
 
Odgovor na temu

Koce
DBA
Serbia, Belgrade

Član broj: 59217
Poruke: 142
*.vektor.net.



+1 Profil

icon Re: Brisanje podataka iz baze ms sql03.07.2008. u 08:51 - pre 158 meseci
pa, pod pretpostavkom da imas spoljne kljuceve i\ili trigere (u opstem slucaju), to nije jednostavno rjesenje...
ovo sam iskopao jos davno ali nisam nikad probao pa nam ti javi kako je proslo:




/*

This batch t-sql deletes data from all the tables in the database.

Here is what it does:
1) Disable all the constraints/triggers for all the tables
2) Delete the data for each child table & stand-alone table
3) Delete the data for all the parent tables
4) Reseed the identities of all tables to its initial value.
5) Enable all the constraints/triggers for all the tables.


Note: This is a batch t-sql code which does not create any object in database.
If any error occurs, re-run the code again. It does not use TRUNCATE statement to delete
the data and instead it uses DELETE statement. Using DELETE statement can increase the
size of the log file and hence used the CHECKPOINT statement to clear the log file after
every DELETE statement.

Imp: You may want to skip CHECKIDENT statement for all tables and manually do it yourself. To skip the CHECKIDENT,
set the variable @skipident to "YES" (By default, its set to "NO")

Usage: replace #database_name# with the database name (that you wanted to truncate) and just execute the script in query analyzer.

*/

use [#database_name#]

Set NoCount ON


Declare @tableName varchar(200)
Declare @tableOwner varchar(100)
Declare @skipident varchar(3)
Declare @identInitValue int

set @tableName = ''
set @tableOwner = ''
set @skipident = 'NO'
set @identInitValue=1

/*
Step 1: Disable all constraints
*/

exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

/*
Step 2: Delete the data for all child tables & those which has no relations
*/

While exists
(
select T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where (TC.constraint_Type ='Foreign Key'
or TC.constraint_Type is NULL) and
T.table_name not in ('dtproperties','sysconstraints','syssegments')
and Table_type='BASE TABLE' and T.table_name > @TableName
)


Begin
Select top 1 @tableOwner=T.table_schema,@tableName=T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where (TC.constraint_Type ='Foreign Key'
or TC.constraint_Type is NULL) and
T.table_name not in ('dtproperties','sysconstraints','syssegments')
and Table_type='BASE TABLE' and T.table_name > @TableName
order by t.table_name


--Delete the table
Exec('DELETE FROM '+ @tableOwner + '.' + @tableName)

--Reset identity column
If @skipident = 'NO'
If exists(
SELECT * FROM information_schema.columns
WHERE COLUMNPROPERTY(OBJECT_ID(
QUOTENAME(table_schema)+'.'+QUOTENAME(@tableName)),
column_name,'IsIdentity')=1
)
begin
set @identInitValue=1
set @identInitValue=IDENT_SEED(@tableOwner + '.' + @tableName)
DBCC CHECKIDENT (@tableName, RESEED, @identInitValue)
end

checkpoint
End

/*
Step 3: Delete the data for all Parent tables
*/

set @TableName=''
set @tableOwner=''

While exists
(
select T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where TC.constraint_Type ='Primary Key'
and T.table_name <>'dtproperties'and Table_type='BASE TABLE'
and T.table_name > @TableName
)


Begin
Select top 1 @tableOwner=T.table_schema,@tableName=T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where TC.constraint_Type ='Primary Key'
and T.table_name <>'dtproperties'and Table_type='BASE TABLE'
and T.table_name > @TableName
order by t.table_name

--Delete the table
Exec('DELETE FROM '+ @tableOwner + '.' + @tableName)

--Reset identity column
If @skipident = 'NO'
If exists(
SELECT * FROM information_schema.columns
WHERE COLUMNPROPERTY(OBJECT_ID(
QUOTENAME(table_schema)+'.'+QUOTENAME(@tableName)),
column_name,'IsIdentity')=1
)
begin
set @identInitValue=1
set @identInitValue=IDENT_SEED(@tableOwner + '.' + @tableName)
DBCC CHECKIDENT (@tableName, RESEED, @identInitValue)
end

checkpoint

End

/*
Step 4: Enable all constraints
*/

exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

Set NoCount Off
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql03.07.2008. u 10:03 - pre 158 meseci
He, he, veoma prosto. Probacu pa javljam, smetaju mi stari podaci koji su sluzili za probu, kvare evidenciju i ostalo. Treba ce mi vremena da sve zavrsim pa javljam. Hm, mrzim tezi nacin, assessova baza je boza, udjes pobrises i gotovo, a ovo je nauka :) Hvala u svakom slucaju, javljam uskoro sta sam uradio.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Brisanje podataka iz baze ms sql03.07.2008. u 10:06 - pre 158 meseci
1. skines bazu offline;
2. drop database;
3. create all iz scriptova (ako nemas skriptove za kreiranje mozes ih za vrlo kratko vreme generisati pomocu vecine alata - SSMS na primer)
Every hamster has his day.
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql03.07.2008. u 12:23 - pre 158 meseci
Ovo mi se vise svidja, probacu sad.



[Ovu poruku je menjao djgorandj dana 03.07.2008. u 16:38 GMT+1]
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 07:12 - pre 158 meseci
Nisam nista uspeo, ne modu da napravim skripte, nemam tu opciju, skinuo sam i instalirao kao neki ssms i vec sam ga imao instaliranog ali ne mogu da nadjem sta pokrece tu aplikaciju.
 
Odgovor na temu

Koce
DBA
Serbia, Belgrade

Član broj: 59217
Poruke: 142
*.vektor.net.



+1 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 08:44 - pre 158 meseci
malo je MS SQL glup kad treba da formira skirptove iz cijele baze, jer ne vodi racuna o redosledu, tako da ti se moze desiti da pokusa da pravi tabelu koja sre veze spoljnim kljucema na neku koja jos nije kreirana i to ti sve fino pukne :)
inace, kroz EM, desni na bazu pa all tasks - "generete sql scripts..."
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 08:52 - pre 158 meseci
Citat:
djgorandj: Nisam nista uspeo, ne modu da napravim skripte, nemam tu opciju, skinuo sam i instalirao kao neki ssms i vec sam ga imao instaliranog ali ne mogu da nadjem sta pokrece tu aplikaciju.


SSMS je SQL Server Management Studio default editor koji stize uz SQL Server 2005. Ako korsitis stariju verziju tool se zove Enterprise Manager. Izaberes bazu kliknes desnim izaberes Tasks (ili All Tasks...) pa Generate Scripts. Dobijes lep wizard koji sve sam uradi. Step by step uputstvo imas ovde.
Every hamster has his day.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 09:09 - pre 158 meseci
Citat:
Koce: malo je MS SQL glup kad treba da formira skirptove iz cijele baze, jer ne vodi racuna o redosledu, tako da ti se moze desiti da pokusa da pravi tabelu koja sre veze spoljnim kljucema na neku koja jos nije kreirana i to ti sve fino pukne :)


Upravo gledam u script generisan na ovaj nacin - prvo su generisane tabele, zatim view-i, funkcije pa procedure. Na kraju sa ALTER TABLE dodati spoljni kljucevi.
Every hamster has his day.
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 09:52 - pre 158 meseci
Provalio sam sta ssms ali nisam imao instaliranu 2005 verziju.Sad sam je upravo instalirao i napravio backup kompletne baze pa da vidim dal ce upaliti.Sad imam sve od funkcija koje ste naveli.Hvala na ulozenom vremenu i trudu. Odoh da ocistim bazu.
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 10:53 - pre 158 meseci
Generisao sam skriptu, kako sad iz nje da napravim bazu?
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 11:18 - pre 158 meseci
Napravis praznu bazu (CREATE DATABASE ime) i izvsis tvoj script koji ce ti napraviti sve ostalo.
Every hamster has his day.
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 11:55 - pre 158 meseci
U tome i jeste zackoljica :) , ja napravim novu tabelu, ali kojom komandom da pokrenem tu skriptu?Ona je ucitana i nisam nista nasao sto bi je aktiviralo.Ne mogi ni na netu da nadjem.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 12:32 - pre 158 meseci
F5 u SSMS (ili imas dugme Execute ili meni Query->Execute)
Every hamster has his day.
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql04.07.2008. u 12:34 - pre 158 meseci
Hvala, uradjeno.
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql05.07.2008. u 07:50 - pre 158 meseci
Imal koji drugi nacin, nije pola toga generisao preko skripti, pola stvari u programu i ne radi?
 
Odgovor na temu

djgorandj
Goran Avramovic
Arandjelovac

Član broj: 103981
Poruke: 196
*.vozd.net.

ICQ: 242041632
Sajt: www.rcavioni.com


+3 Profil

icon Re: Brisanje podataka iz baze ms sql11.07.2008. u 13:28 - pre 158 meseci
Ima i pronasao sam ga, mnogo lakse, nista nemora da se pise. Desni klik na tabelu pa open table pa return all rovs i onda selektujem komplenu tabelu i na del obrisem podatke. Tako je najlakse, samo sto to ja nisam znao.Inace i mogu se menjati tako podaci kao nemate forme za to.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
82.117.202.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Brisanje podataka iz baze ms sql11.07.2008. u 13:42 - pre 158 meseci
Naravno da moze tako, ali je Koce jos na pocetku teme rekao da pretpostavlja da imas kljuceve na tabelama. Ne mozes obrisati red koji je roditelj nekom a da pre toga ne obrises sve podredjene zapise (mozes da privremeno iskucis constarainte, ali to bi zahtevalo scriptu). To brzo moze da se pretvori na konstano pretrazivanje tabela ko je kome roditelj, i vrlo lakko moze nesto da promakne. Uz to je dugotrajan i bolan posao :)
Takodje na nacin koji si ti naveo bi svaki put kada odlucis da ocistis bazu morao to raditi, da si definisao skripte (bilo za kreiranje bilo ono sto je Koce naveo) to bi svaki put mogao da poteras i za manje od sekunde ocistis bazu.
Takodje ako imas Identity polja na tabelama tvojim nacinom ih neces resetovati (radio si delete ne truncate).
Na taj nacin ne cistis log (sta vise jos ga popunjavas gomilom dropova...)
Ima jos mnogo razloga zasto je taj nacin pogresan...
Every hamster has his day.
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.adsl.beotel.net.

ICQ: 20785904


+4 Profil

icon Re: Brisanje podataka iz baze ms sql11.07.2008. u 17:53 - pre 158 meseci
eo mog predloga - sirov algoritam koji se moze optimizovati da ne bude n*n slozenosti, skripta bi bila jako jednostavna (10-15 redova), a resenje cisto i bez nekih komplikacija

1. krenuti kroz tabele i za svaku izvrisiti: "truncate @imeTabele"
2. ponoviti tacku 1. n puta (gde je n broj tabela).

(kod child-parent tabela truncate ce u prvom prolazu da uspe samo child tabelu da izbrise, al u drugom prolazu ce uspeti i parent tabelu da izbrise). U n-tom prolazu brise n-tog roditelja (extremna situacija kad je svaka tabela roditelj prethodne tabele...)

-identity svih tabela ce se resetovati, triggeri nece pasti (a nece ni reagovati), constrainti ostaju....

edit:
optimizacija:
tacku 1. prepraviti tako da se pokusava truncate samo na tabelama na kojima
a) @identity nije resetovan (pretpostavljam da moze da se iscupa ovo iz neke sistemske tabele)
ili
b) count(*)>0
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
79.101.182.*

Jabber: DarkMan


Profil

icon Re: Brisanje podataka iz baze ms sql13.07.2008. u 12:26 - pre 158 meseci
U vise navrata mi je bilo potrebno praznjenje/brisanje tabela, svih ili samo odredjenih, ali bez ubijanja constraintova.
Uglavnom sam to postizao rucnim odredjivanjem pravilnog redosleda praznjenja/brisanja tabela.
Jednom prilikom sam pokusao da napisem skriptu koja bi sam pronasla taj redosled. Nisam uspeo iz prve ali sam se kasnije vratio tome i uspeo.
Hteo sam da postujem na forumu kao mozgalicu pa sam se predomislio (mislio sam da nece nikome trebati).
Evo ko hoce moze da isproba.

Code:

declare @tables table(TABLE_NAME varchar(100), REFERENCES_TABLE varchar(100))        

insert into @tables(TABLE_NAME, REFERENCES_TABLE)
select T1.TABLE_NAME, T4.TABLE_NAME as REFERENCES_TABLE
from INFORMATION_SCHEMA.TABLES T1
left join INFORMATION_SCHEMA.TABLE_CONSTRAINTS T2 on T1.TABLE_NAME = T2.TABLE_NAME and T2.CONSTRAINT_TYPE = 'FOREIGN KEY'
left join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS T3 on T3.CONSTRAINT_NAME = T2.CONSTRAINT_NAME
left join INFORMATION_SCHEMA.TABLE_CONSTRAINTS T4 on T3.UNIQUE_CONSTRAINT_NAME = T4.CONSTRAINT_NAME
where T1.TABLE_TYPE = 'BASE TABLE'

-----------------------------------------------------------------------------------------------------------------------

declare @drop table(TABLE_NAME varchar(100))
while (select count(*) from @tables) > 0
  begin

    insert into @drop(TABLE_NAME)
    select distinct TABLE_NAME from @tables
    where TABLE_NAME not in (select distinct REFERENCES_TABLE from @tables where REFERENCES_TABLE is not null)

    delete from @tables
    where TABLE_NAME in (select TABLE_NAME from @drop)

  end

-----------------------------------------------------------------------------------------------------------------------

declare @table_name varchar(100), @query varchar(120)
declare tables cursor for select TABLE_NAME from @drop
open tables
fetch next from tables into @table_name

while @@FETCH_STATUS = 0 and @@ERROR = 0
  begin

    set @query = 'drop table [' + @table_name + ']'
    print @query
    exec(@query)
    if @@ERROR <> 0 BREAK
    fetch next from tables into @table_name

  end

close tables
deallocate tables

 
Odgovor na temu

[es] :: MS SQL :: Brisanje podataka iz baze ms sql

[ Pregleda: 4031 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.