[MSSQL] Cannot insert NULL in Primary Key

0

Witam,
Próbuje dodać coś do tabeli, niestety <ort>ominełem </ort>pole ID z myślą, że samo sie ustawi, a tu taki error:
Cannot insert the value NULL into column 'ID'
Pole ID ma PRIMARY KEY.
W moim zapytaniu po prostu omijam ID.
Co moge zrobić, żeby po prostu dodało kolejne ID po poprzednim rekordzie?
Dodam, że moje ID nie jest liczone od zera tylko od liczb ujemnych w góre.

EDIT: Chyba poszło dodałem IDENTITY (1, 1) po ID.

Natomiast mam kolejny problem
$result = mssql_query("INSERT INTO [db_role].[dbo].[Character] ([EID], [Role], [Nick], [Job], [Spec], [Lvl], [axd], [Exp], [DID], [DTID], [Power], [Dexterity], [Hardness], [Status], [Seil], [MP], HP], [SScore], PScore], [Assasin], [Location], [D1], [D2] ,[D3], [Head], [Body], [BackTown], [Anger]) VALUES ($eid[0], 0, '$nickname', 0, 4, $level, 20, 0, 0, 0, 18, 16, 8, 8, 10, 200, 200, $point1, $point2, 0, 0, 256904, 259392, 16117, 1, 1, 0, 30000)");
Errpr
Incorrect syntax near ','. (severity 15

EDIT2:
Poszedłem spać, rano działa... <ort>niewiem </ort>jakim cudem. ;)

0

[MP], HP],

Brak otwierajacego nawiasu kwadratowego.

0

Chyba mocno zaspały byłem, bo rano już jest nawias kwadratowy ;). Naprawił się.
Dzięki jeszcze mam jedno pytanie.
Jak uciszyć MSSQL? Mam własne komunikaty na podstawie wartości zwracanych przez funkcje i nie potrzebuje jeszcze kodu w stylu:

Warning: mssql_query() [function.mssql-query]: message: Violation of UNIQUE KEY constraint 'TDX_4'. Cannot insert duplicate key in object 'dbo.Role'. (severity 14) in /var/www/...p on line 745

Warning: mssql_query() [function.mssql-query]: General SQL Server error: Check messages from the SQL Server (severity 14) in /var/www/... on line 745

Warning: mssql_query() [function.mssql-query]: Query failed in /var/www/... on line 745

No chyba, że mam zapobiec temu typu sytuacjom (czyli próbie dodania rekordu o takich samych kluczach), ale wyłączenie było by dla mnie lepszym rozwiązaniem, tymbardziej, że nic mi nie grozi z takiego powodu.

EDIT:
Jeżeli jednak chciałbym zapobiec temu typu sytuacjom to jak uprościć zapytanie MSSQL?
Które to będzie sprawdzać czy dany rekord istnieje? Poniższy sposób działa, ale mi sie nie podoba.
SELECT[Nickname] FROM [db_Play].[dbo].[Player] WHERE [Nickname] = '$nickname'

0
  1. Po co zakladac klucz unikalny jesli nie chcesz unikalnosci?
  2. Jesli unikatowa kolumna to Nickname, to tak wlasnie sprawdzisz czy istnieje w niej jakis element - co w tym brzydkiego?
0

Dlatego, bo skompilowana już aplikacja z którą pracuje tego wymaga.
Ja tylko ją usprawniam skryptami PHP.

Swoją drogą unikalność musi być, tylko denerwowało mnie, że musiałem napisać kod, który sprawdza czy już jest dany rekord dodany i wtedy wykona zapytanie bądź nie.
To działało tak, że jak wywalało error to mssql_query zwracało 0 i wyswietlała sie informacja, ze nick postaci jest już zajęty.

0

Co do pierwszego - no to ok, trudno sie mowi.
A samo sprawdzanie jest de facto ladniejsze niz czekanie na blad, bo:

  • z kodu jasno wynika jakie sa wymagania
  • mssql_query zwroci 0 w przypadku kazdego bledu, niekoniecznie naruszenia tego klucza
  • sprawdzanie tak czy inaczej jest, osobiscie wole jawne.

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