Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z primary key w procedurze składowanej
Forum PHP.pl > Forum > Bazy danych
Niktoś
Witam.Mam problem z przekazaniem wartości klucza z jednej tabeli do drugiej w procedurze składowanej.
Może podam trochę kodu :
  1. CREATE TABLE dbo.Client
  2. ( IDc BigINT IDENTITY(1,1)PRIMARY KEY CLUSTERED,
  3. ....................................
  4. .........................................
  5. )
  6. CREATE TABLE dbo.Tranz(
  7. IDs BigInt NOT NULL IDENTITY(1,1)PRIMARY KEY CLUSTERED,
  8. IDkli BigInt NOT NULL,
  9. ..................................................
  10. .................................................
  11. )
  12. CREATE PROCEDURE dbo.Proc_Tranz(
  13. @IdsK NVARCHAR(Max),
  14. @ImieKl NVARCHAR(50),
  15. @NazwiskoKl NVARCHAR(50),
  16. ............................)
  17. INSERT INTO Client(ImieKlnt,NazwiskoKlnt.................................................)
  18. SELECT @ImieKl,@NazwiskoKl...............................................
  19.  
  20. INSERT INTO Tranz(IDkli,IdKlient,..................................................)
  21. SELECT questionmark.gifquestionmark.gif?,IdkPr................................................................
  22. FROM @Param sb


Przeważnie przekazywałem wartości z jednej tabeli do drugiej za pomocą parametrów.Działa dobrze-tylko o to chodzi ,że miałbym tabele bez indexów,a to by było chyba źle.
Utworzyłem więc kolumny z indeksami IDc z tabeli Client i IDs z tabeli Tranz-które są autoincrement dynamicznie tworzone przez bazę,więc nie jako nie wiem jak przekazać IDc z tabeli Client do tabeli Tranz kolumny IDkli nie używając parametrów.
Wdzięczny byłbym za pomoc bo już nie wiem jak to zrobić.
mortus
Przede wszystkim to procedura nie nazywa się składowa, a składowana. Poza tym posługiwanie się imieniem i nazwiskiem w celu wyłonienia unikalnego identyfikatora użytkownika nie jest najlepszym pomysłem. Osobiście znam osobę, która nazywa się tak jak ja i ma tak samo na imię. Także parametrem procedury powinien być w tym przypadku właśnie identyfikator użytkownika. Inaczej można się doszukiwać błędnych założeń w projekcie aplikacji.
Niktoś
Dzięki już poprawiam odnośnie tytułu ,troszeczkę nie zrozumiałem Twojego przekazu,pewnie Ty nie zrozumiałeś mojego.
Cytat
Poza tym posługiwanie się imieniem i nazwiskiem w celu wyłonienia unikalnego identyfikatora użytkownika nie jest najlepszym pomysłem.
,wiem ,dlatego ,dokleiłem do tabel kolumny indexowane ,tylko mam problem z przekazaniem id z jednej tabeli do drugiej poprzez tą procedurę składowaną.
Może powiem że w Net odnoszę się procedury:
Kwerend coś w stylu:
  1. SqlCommand comm= new SqlCommand("dbo.Proc_Tranzakcje", sqlConnection);
  2. comm.CommandType = CommandType.StoredProcedure;
  3. var ParamIdProd = new SqlParameter("@IdsK", SqlDbType.VarChar);
  4. var Pimie = new SqlParameter("@ImieKl", SqlDbType.VarChar);
  5. Pimie.Value-"Ala";
  6. comm.Parameters.Add(Pimie);

Kwerenda odnosi się bezpośrednio do procedury, obie tabele są uzupełniane za pomocą parametrów.Problem w tym ,że utworzone kolumny z indexami ,nie są tworzone z zewnątrz,jak przepisać kolumnę id z jednej tabeli do drugiej ,bez użycia parametrów?
mortus
W ciele procedury użyj zmiennej:
DECLARE @cid BIGINT
INSERT INTO Client(...)
SELECT @cid = SCOPE_IDENTITY()
INSERT INTO Tranz VALUES (..., @cid, ...)

Tutaj kilka informacji na ten temat.
No chyba, że chodzi Ci o coś innego.
Niktoś
Najprawdopodobniej o takie coś mi chodziło.Właśnie sprawdzam.Dziękuję.

Edit.Działa legancko:)Jeszcze raz dziękuję.
W ten sposób mam w pełni indeksowane tabele.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.