transact sql usuwanie rekordów

0

próbuję usunąć rekordy z tabeli ksiazka których nie ma w tabeli zamowienia ale przy not exists pojawia mi się syntax error

 DECLARE complex_cursor CURSOR FOR
    SELECT *
    FROM ksiazka AS k
    WHERE k.id_ksiazki not exists 
         (SELECT z.id_ksiazki
          FROM zamowienia AS z) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
0

Co to za baza, treść błędu, chyba powinno być coś w stylu

SELECT *
    FROM ksiazka AS k
    WHERE NOT EXISTS 
         (SELECT z.id_ksiazki
          FROM zamowienia AS z WHERE z.id_ksiazki = k.id_ksiazki) ;

ale tak ogólnie skoro chcesz tylko usunąć to po co je pobierasz?

     DELETE FROM ksiazka k WHERE NOT EXISTS 
         (SELECT TRUE
          FROM zamowienia AS z WHERE z.id_ksiazki = k.id_ksiazki)
0

jak wklejam ten twoj kod to mam taki error:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'k'.

      DELETE FROM ksiazka k WHERE NOT EXISTS 
         (SELECT TRUE
          FROM zamowienia AS z WHERE z.id_ksiazki = k.id_ksiazki)
0

spróbuj tak

DELETE FROM ksiazka WHERE NOT EXISTS 
         (SELECT TRUE
          FROM zamowienia AS z WHERE z.id_ksiazki = ksiazka.id_ksiazki)
0

dzieki teraz działa tylko zamiast true trzeba bylo dac *

0

To co to za baza danych? Jakaś pozbawiona typu boolean czy co? Not exists powinien działać nawet jeśli tam by było null zamiast true.
W postgresie wszystko śmiga:

select 1 where not exists (select null where 1 = 0); --zwraca 1
select 1 where not exists (select null); -- nic nie zwraca
0

Wątki bez podanej informacji o bazie danych powinny być usuwane. Chyba, że lubicie bawić się we wróżkę...

0

jeśli pytacie o to jak zostala utworzona ta baza danych to tak:

 IF DB_ID('ksiegarnia') IS NOT NULL 
    DROP DATABASE ksiegarnia;
GO

--DROP DATABASE ksiegarnia
CREATE DATABASE ksiegarnia
0

Mam jeszze jeden problem, chce utworzyc widok a potem dodać do niego rekord

 CREATE VIEW oficyna_wydawnicza
AS 
SELECT w.id_wydawnictwa, w.nazwa
FROM wydawnictwo w
go
select * from oficyna_wydawnicza
go
set IDENTITY_INSERT oficyna_wydawnicza on
INSERT INTO oficyna_wydawnicza VALUES (9, 'xxx')

bład jaki sie pojawia: An explicit value for the identity column in table 'oficyna_wydawnicza' can only be specified when a column list is used and IDENTITY_INSERT is ON.

0

Dobra chyba już wiem o co pytacie to jest ms sql server express

0
SET IDENTITY_INSERT oficyna_wydawnicza ON

To powinien używać ktoś, kto wie co to robi. Ty nie wiesz.
Aby dodać rekord to powinieneś zrobić:

INSERT INTO oficyna_wydawnicza VALUES ('xxx')

To jest poprawne ale czy zadziała na view, to nie wiem...

0

dzieki teraz dziala

1 użytkowników online, w tym zalogowanych: 0, gości: 1