Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja obliczająca srednią
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
sandra1023
Mam takie tabelki :
  1. CREATE TABLE [dbo].[Student](
  2. [ID_Studenta] [int] NOT NULL,
  3. [Student_imie] [varchar](50) NOT NULL,
  4. [Student_nazwisko] [varchar](50) NOT NULL,
  5. [Student_data_ur] [datetime] NOT NULL,
  6. [ID_kierunek] [int] NOT NULL,
  7. [Nr_albumu] [int] IDENTITY(1,1) NOT NULL,
  8. [Semestr] [int] NOT NULL,
  9. [Data_rozp_studiow] [datetime] NOT NULL,
  10. [PESEL] [int] NOT NULL,
  11. [Adres] [nvarchar](max) NOT NULL,
  12. [Email] [varchar](50) NULL,
  13. [Uwagi] [nvarchar](max) NULL,
  14. CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
  15. (

i
  1. CREATE TABLE [dbo].[Archiwum](
  2. [ID_Student] [int] NOT NULL,
  3. [Student_imie] [varchar](50) NOT NULL,
  4. [Student_nazwisko] [varchar](50) NOT NULL,
  5. [Data_rozp_studiow] [datetime] NOT NULL,
  6. [Data_ukonczenia_studiow] [datetime] NOT NULL,
  7. [Nr_albumu] [int] NOT NULL,
  8. [PESEL] [int] NOT NULL,
  9. [ID__Kierunek] [int] NOT NULL,
  10. [Uwagi] [nvarchar](max) NULL,
  11. CONSTRAINT [PK_Archiwum] PRIMARY KEY CLUSTERED


i chcę żeby po ukończeniu studiów student był przenoszony do archiwum. Kombinowałam z tym wiele ale niestety jestem poczatkujaca. Mysle że można to zrobic za pomocą trigera który dla semestru>5 przenosi studenta do archiwum ale nie wiem jak to zapisać. Bardzo proszę o pomoc.
erix
Uhm, ale po co przenosić do osobnej tabeli? Nie lepiej dać dodatkowe pole archiwum 0/1?
sandra1023
Niestety musi być usuwany z Studenta a jego dane archiwizowane w archiwum.


Jeszcze mam polecenie: Istnieje automatyczna rejestracja studenta po uzyskaniu wszystkich zaliczeń. Co prawda mam tabelke zaliczenia ale wydaje mi sie bardzo trudnym zadaniem połączeniem jej ze studentem. Więc może zrobie dodatkowy wiersz stan zaliczeń i jeżeli tam bedzie 1 to semestr+1. Niestety tez nie wiem jak to zapisać.
erix
Masz jakieś zaliczenie z tego, czy jak?
sandra1023
Tak na zaliczenie. musze zrobić baze danych dziekanatu i mam do tego polecenia. Z większością dałam sobie radę ale najwiekszy problem mam z automatyczną rejestracją studenta na kolejny semestr i z przenoszeniem wartości z tabeli do tabeli.
erix
No to pokaż, jak robisz; inaczej zamykamy, gdyż nie odrabiamy za kogoś prac domowych. Co innego, gdy jest inicjatywa.
sandra1023
zrobilam to tak:


  1. ALTER TRIGGER [dbo].[archiwu]
  2. ON [dbo].[Student]
  3. after INSERT,UPDATE
  4. AS
  5. IF ((SELECT semestr FROM Student)>5)
  6. begin
  7. UPDATE dbo.Student
  8. SET archiwum=1
  9. end


tylko ze po zrobieniu
  1. UPDATE dbo.Student
  2. SET Semestr=7
  3. WHERE Student_imie ='jan'


mam taki blad
  1. Msg 512, Level 16, State 1, Procedure archiwu, Line 5
  2. Subquery returned more than 1 value. This IS NOT permitted when the subquery follows =, !=, <, <= , >, >= OR when the subquery IS used AS an expression.
  3. The statement has been terminated.



Jak to naprawic?
trafas
Witam,

Problem tkwi w linii 5 trigera:

  1. IF ((SELECT semestr FROM Student)>5)


Zapytanie

  1. SELECT semestr FROM Student


zwraca więcej niż jedną wartość i dlatego się wywala cały triger.

Spróbuj zamienić na zapytanie poniżej:

  1. IF ((SELECT TOP 1 semestr FROM Student)>5)


Pozdrawiam.
prachwal
jest taka wirtualna tabela jak Inserted z której można skorzystać w Triggerze to po primo

secundo a co się stanie jak zaktualizujemy więcej niż jednego studenta na raz?
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-2024 Invision Power Services, Inc.