Dobrej pokec   Lišanská šlapka   MSDN   VB na Microsoft.cz   NCHAT Nový design
   Portál  O firmě  Profil  Reference  Produkty  Odkazy  Diskuse  Tisková verze 



  Novinky e-mailem
Pokud chcete být informováni o změnách ,přihlašte se k odběru novinek!
  
  
  Nejčtenější články
 Seznam všech českých hubů abecedně. (32131)
 Seznam hubů nad 100 uživatelů (20843)
 Konfigurovatelné rozbalovací menu (17458)
 Jak na makra (14338)
 Rozbalovací menu v JavaScriptu (2.) (12665)
  Nejstahovanější soubory
 Action Meter (1846)
 Slovní Fotbal (777)
 IE Boss Guard (484)
 zdroják slovní fotbal (383)
 Folder Watcher (370)
  Anketa

  Nabídka portálu

 Adobe Premiere
    Jak se dá udělat
 Alternativní prohlížeče
    FireFox
 ASP
    Tipy a triky
 Direct Connect
    Huby
    Scripty pro HUB
    Tipy a triky CZDC++
 Game Maker
    Tipy a triky
 Hry
    Akční
    Logické
 HTML
    Scripting (VBS,JS)
    Tipy a triky
 Internet
    Užitečné triky
 Microsoft Office
    Tipy, triky, návody
    Užitečná makra
    VBA Tipy a triky
 MS SQL Server
    Nastavení
    Seriály
    Tipy a triky
 Multimedia
    Návody
 Oracle
    PL/SQL
 PHP
    Jak na to
    Tipy a triky
 Užitečné odkazy
    Grafické programy
    Programátorské
 Visual Basic
    DirectX
    Formuláře
    Jak se dá udělat ...
    Užitečné funkce
    Win32Api
    Zdroje
 Visual Basic .NET
    Užitečné funkce
 Vtípky
    Vtipy a anekdnoty
 Vypalování
    DVD Shrink
    Tipy a triky
 Windows
    Jak se dá ...
    Tipy a triky pro XP
    Triky pro IE


Nabídka portálu se při zobrazení článku přesouvá na konec pravého sloupce nabídek.

 Procedura pro smazání a vytvoření referencí

Autor: Filip Yaghob
Zdroj: Vlastní tvorba
Vytvořeno: 25.9.2003
Publikováno: 26.9.2003
Čtenářů: 2527
Unikátních: 2500


Občas se stane, že potřebujete smazat nějakou tabulku a ono to nejde, protože je referencovaná. Jak z toho ven?

Velmi často se mi stává, že potřebuju smazat a znovu vytvořit (se změněnou strukturou) nějakou tabulku a nejde mi to, protože je referencovaná.
Procedura vygeneruje dva typy T-SQL příkazů: nejprve drop referencí a pak jejich create. Do změnového skriptu pak přenesu všechny dropy a pak všechny create, které potřebuji.
Vstupním parametrem procedury je jméno referencované tabulky.
create procedure usp_GetReferenceScript(@ReferencedTableName sysname)
as
begin
  declare @myTable table(
    RefName   sysname not null,
    RTable    sysname not null,
    FTable    sysname not null,
    RColumn   sysname not null,
    FColumn   sysname not null,
    OnDelete  bit   not null,
    OnUpdate  bit   not null)
  declare @crlf   char(2)
  set @crlf = char(13) + char(10)
  
  set nocount on

  insert into @myTable
    select o.Name,
           r.Name,
           f.Name,
           scr.Name,
           scf.Name,
           objectproperty(ref.constid, 'CnstIsDeleteCascade'),
           objectproperty(ref.constid, 'CnstIsUpdateCascade')
      from sysobjects o
        inner join sysreferences ref
          on (ref.constid = o.id)
        inner join sysobjects r
          on (ref.rkeyid = r.id)
        inner join sysobjects f
          on (ref.fkeyid = f.id)
        inner join syscolumns scr
          on ((scr.id = ref.rkeyid) and (scr.colid = ref.rkey1))
        inner join syscolumns scf
          on ((scf.id = ref.fkeyid) and (scf.colid = ref.fkey1))
      where o.xtype = 'F' and r.Name = @ReferencedTableName
      order by 3
  select 'alter table ' + FTable + @crlf +
         '  drop constraint ' + RefName
    from @myTable
  select 'alter table ' + FTable + @crlf +
         '  add constraint ' + RefName +
         ' foreign key(' + FColumn + ')' + @crlf +
         '  references ' + RTable + ' (' + RColumn + ')' +
         case when OnUpdate = 1
           then @crlf + '  on update cascade'
           else ''
         end +
         case when OnDelete = 1
           then @crlf + '  on delete cascade'
           else ''
         end
    from @myTable
end



Příspěvky ke článku:



© Swit.cz, Marek Kočí 2003