ďťż
 
[MSSQL 2000] procedura kopiująca rekordy i indeks UNIQUE ďťż
 
[MSSQL 2000] procedura kopiująca rekordy i indeks UNIQUE
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MSSQL 2000] procedura kopiująca rekordy i indeks UNIQUE



Krzysztof Wiśniewski - 23-07-2007 00:02
[MSSQL 2000] procedura kopiująca rekordy i indeks UNIQUE
  Jest sobie baza faktur. Dla każdej pozycji faktury w osobnej tabelce
zapisywane są pewne "detale" (mniejsza o to, jakie to są dane). Mamy więc
taką strukturę:

dbo.PozycjeFaktur:
- IDPozycjiFaktury (klucz główny)
- IDFaktury (identyfikator faktury)

dbo.PozycjeFaktur_Detale:
- ID (klucz główny)
- IDPozycjiFaktury (identyfikator pozycji faktury)
- Detal

Muszę napisać procedurę, która zestaw "detali" przypisanych do jednej
pozycji faktury przepisze do pozostałych pozycji faktury.

Wszystko byłoby proste, gdyby nie istniał indeks typu UNIQUE na polach:
- IDPozycjiFaktury
- Detal
w tabeli "dbo.PozycjeFaktur_Detale". Zabezpiecza on przed wstawieniem do tej
tabeli dwóch takich samych detali dla tej samej pozycji faktury.

Można by napisać tak:

INSERT INTO dbo.PozycjeFaktur_Detale
(IDPozycjiFaktury, Detal)
SELECT
IDPozycjiFaktury, Detal
FROM dbo.PozycjeFaktur_Detale
INNER JOIN dbo.PozycjeFaktur
ON dbo.PozycjeFaktur.IDPozycjiFaktury =
dbo.PozycjeFaktur_Detale.IDPozycjiFaktury
WHERE dbo.PozycjeFaktur.IDFaktury = @JakiesTamID

Jak w powyższym zapytaniu pominąć kombinacje "IDPozycjiFaktury + Detal",
które już istnieją w tabeli "dbo.PozycjeFaktur_Detale", aby nie dopuścić do
naruszenia klucza UNIQUE?

Pozdrawiam,
Krzysiek





Pawel Potasinski - 24-07-2007 00:12

  Na szybko coś takiego:

SELECT PF.IDPozycjiFaktury, D.Detal
FROM dbo.PozycjeFaktur PF
LEFT JOIN dbo.PozycjeFaktur_Detale PFD
ON PF.IDPozycjiFaktury = PFD.IDPozycjiFaktury
INNER JOIN (SELECT TOP 1 Detal
FROM dbo.PozycjeFaktur_Detale PFD2
INNER JOIN dbo.PozycjeFaktur PF2
ON PF2.IDPozycjiFaktury = PFD2.IDPozycjiFaktury
WHERE PFD2.IDPozycjiFaktury = PF2.IDPozycjiFaktury
AND PF2.IDFaktury = @JakiesIDFaktury) D ON 1=1
WHERE PF.IDFaktury = @JakiesIDFaktury AND PFD.IDPozycjiFaktury IS NULL

Prawdopodobnie da się to zapisać tak, by uniknąć wpisywania zmiennej w dwóch
miejscach.

--
Pozdrawiam
Paweł Potasiński

Użytkownik "Krzysztof Wiśniewski" <ktuvok@poczta.onet.pl> napisał w
wiadomości news:f7vvb6$r8f$1@news.onet.pl...
> Jest sobie baza faktur. Dla każdej pozycji faktury w osobnej tabelce
> zapisywane są pewne "detale" (mniejsza o to, jakie to są dane). Mamy więc
> taką strukturę:
>
> dbo.PozycjeFaktur:
> - IDPozycjiFaktury (klucz główny)
> - IDFaktury (identyfikator faktury)
>
> dbo.PozycjeFaktur_Detale:
> - ID (klucz główny)
> - IDPozycjiFaktury (identyfikator pozycji faktury)
> - Detal
>
> Muszę napisać procedurę, która zestaw "detali" przypisanych do jednej
> pozycji faktury przepisze do pozostałych pozycji faktury.
>
> Wszystko byłoby proste, gdyby nie istniał indeks typu UNIQUE na polach:
> - IDPozycjiFaktury
> - Detal
> w tabeli "dbo.PozycjeFaktur_Detale". Zabezpiecza on przed wstawieniem do
> tej tabeli dwóch takich samych detali dla tej samej pozycji faktury.
>
> Można by napisać tak:
>
> INSERT INTO dbo.PozycjeFaktur_Detale
> (IDPozycjiFaktury, Detal)
> SELECT
> IDPozycjiFaktury, Detal
> FROM dbo.PozycjeFaktur_Detale
> INNER JOIN dbo.PozycjeFaktur
> ON dbo.PozycjeFaktur.IDPozycjiFaktury =
> dbo.PozycjeFaktur_Detale.IDPozycjiFaktury
> WHERE dbo.PozycjeFaktur.IDFaktury = @JakiesTamID
>
> Jak w powyższym zapytaniu pominąć kombinacje "IDPozycjiFaktury + Detal",
> które już istnieją w tabeli "dbo.PozycjeFaktur_Detale", aby nie dopuścić
> do naruszenia klucza UNIQUE?
>
> Pozdrawiam,
> Krzysiek
>
>




Pawel Potasinski - 24-07-2007 00:12

  Acha, oczywiście poprzedni post to był tylko SELECT, ale INSERT do tego
dopisać nie jest sztuka :-)

--
Pozdrawiam
Paweł Potasiński

Użytkownik "Krzysztof Wiśniewski" <ktuvok@poczta.onet.pl> napisał w
wiadomości news:f7vvb6$r8f$1@news.onet.pl...
> Jest sobie baza faktur. Dla każdej pozycji faktury w osobnej tabelce
> zapisywane są pewne "detale" (mniejsza o to, jakie to są dane). Mamy więc
> taką strukturę:
>
> dbo.PozycjeFaktur:
> - IDPozycjiFaktury (klucz główny)
> - IDFaktury (identyfikator faktury)
>
> dbo.PozycjeFaktur_Detale:
> - ID (klucz główny)
> - IDPozycjiFaktury (identyfikator pozycji faktury)
> - Detal
>
> Muszę napisać procedurę, która zestaw "detali" przypisanych do jednej
> pozycji faktury przepisze do pozostałych pozycji faktury.
>
> Wszystko byłoby proste, gdyby nie istniał indeks typu UNIQUE na polach:
> - IDPozycjiFaktury
> - Detal
> w tabeli "dbo.PozycjeFaktur_Detale". Zabezpiecza on przed wstawieniem do
> tej tabeli dwóch takich samych detali dla tej samej pozycji faktury.
>
> Można by napisać tak:
>
> INSERT INTO dbo.PozycjeFaktur_Detale
> (IDPozycjiFaktury, Detal)
> SELECT
> IDPozycjiFaktury, Detal
> FROM dbo.PozycjeFaktur_Detale
> INNER JOIN dbo.PozycjeFaktur
> ON dbo.PozycjeFaktur.IDPozycjiFaktury =
> dbo.PozycjeFaktur_Detale.IDPozycjiFaktury
> WHERE dbo.PozycjeFaktur.IDFaktury = @JakiesTamID
>
> Jak w powyższym zapytaniu pominąć kombinacje "IDPozycjiFaktury + Detal",
> które już istnieją w tabeli "dbo.PozycjeFaktur_Detale", aby nie dopuścić
> do naruszenia klucza UNIQUE?
>
> Pozdrawiam,
> Krzysiek
>
>
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= [MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?= MSSQL Express czy Oracle Express [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= [MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?= Pobierananie danych z innej bazy danych w MSSQL Migracja MSSQL 2005 CTP na 2005 Express MSSQL , funkcja pobierajaca sama date (bez czasu) w funkcji [mssql] insert do tabeli na podstawie danych z innej tabeli
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • anette.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com