[ cula99 @ 09.04.2008. 09:29 ] @
Programira se u Delphi-ju da ude jasnije. Znam da se ovo može rešiti ako pre poziva insert-a proverim vrednost za IME ali mi treba rešenje preko SQL servera

(COLLATE postoji samo da ga ne pišem):

CREATE TABLE TABLE_A
(ID VARCHAR(50) NOT NULL,
IME NVARCHAR(100) NULL)

insert za tu tabelu

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)

Kada insertu prosledis parametre
'876878', 'čičak' sve je u redu

INSERT INTO TABLE_A(ID, IME)
VALUES('876878', N'čičak')

ali ako kojim slučajem pošalješ:
'879721', NULL javlja grešku
INSERT INTO TABLE_A(ID, IME)
VALUES('879721', NNULL)

Probao sam sa IF
DECLARE @p NVARCHAR(50)
IF :IME IS NULL
SET @p=NULL
ELSE
SET @p=N:IME

u ovom sličaju insert je ovakav:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, @p)

tada prijavi grešku, ne može naći colonu sa imenom NNULL

Kako rešiti ovaj problem?
[ Vic @ 09.04.2008. 09:34 ] @
Kao prvo da li ti je kod atributa ime oznaceno allow nulls? Druga stvar, umesto da u insertu prosledis null, probaj sa '' ili napravi takav insert koji ce u slucaju null vrednosti upisivati samo id.
[ cula99 @ 09.04.2008. 10:02 ] @
Kako misliš atribute označava kao alow nulls? Ne mogu da pravim takve inserte jer imam preko 100 formi na kojima to treba uraditi, a ceo sistem je osmišljen da se insertu šalju parametri.
[ Vic @ 09.04.2008. 10:12 ] @
Nisam dobro pogledao sta si napisao, opcija za allow nulls ti je ukljucena tako da to nije problem. Ovo definitivno radi na MSSQL-u

CREATE TABLE TABLE_A
(ID VARCHAR(50) NOT NULL,
IME NVARCHAR(100) NULL)

INSERT INTO TABLE_A(ID, IME)
VALUES('879721', null)
[ cula99 @ 09.04.2008. 10:24 ] @
Server hoće da uradi ovo kad je :IME = NULL

INSERT INTO TABLE_A(ID, IME)
VALUES('879721', NNULL)

a ovo bas ne radi i pravi probleme

[Ovu poruku je menjao cula99 dana 09.04.2008. u 11:36 GMT+1]
[ DarkMan @ 09.04.2008. 11:20 ] @
A to NNULL bi trebao da bude nesto kao na fazon unicode NULL?
[ cula99 @ 09.04.2008. 11:43 ] @
Kad ubacis ovaj text u komponentu:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)

ako je IME neki string('čiča') SQL na serveru je ovaj


INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N'čiča')

u bazu upiše 'čiča'

ako je parametar :IME NULL serveru šalje:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, NNULL)

Problem je i u IF-u
ako ga ja pitam

IF nešto
x=5
else
x=y

ako je 'nešto' tacno na x=y ne bi trebalo da se osvrne uopšte
[ Vic @ 09.04.2008. 11:54 ] @
Citat:
cula99: Kad ubacis ovaj text u komponentu:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)


Mislim da te niko bas u potpunosti ne razume. Na pocetku si napisao da se program radi u Delphiju, a ovde koliko vidim imas problem sa SQL-om. Prvo pojasni kako je sve planirano da radi, stored procedure, iz delphi koda.... Kako to gore navedeni tekst ubacujes u komponentu?? Koju komponentu. Mislim ovo je sve jako zbunjujuce, a stvar je kranje prosta i elementarna.
[ DarkMan @ 09.04.2008. 12:02 ] @
NNULL ne postoji u SQL-u i zato ti izbacije gresku.
[ cula99 @ 09.04.2008. 12:35 ] @
1. Postoji TQuery u Delphi-ju:

SELECT ID, IME
FROM TABLE_A

2. Pored toga imas komponentu TQueryUpdate

u TQueryUpdate.InsertSQL je ovaj sql:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)

3a. Kad hoces da ubacis neki rekord uradis ovo:

TQuery.Insert;
TQuery.ParamByName('ID').AsString := '123456';
TQuery.ParamByName('IME').AsString := 'čiča';
TQuery.Post;

Komponenta TQueryUpdate pošalje ovaj Query:

INSERT INTO TABLE_A(ID, IME)
VALUES( '123456', N'čiča')

na Microsoft SQL Server

3b. Kad hoces da ubacis samo ID rekord uradis ovo:

TQuery.Insert;
TQuery.ParamByName('ID').AsString := '123456';
TQuery.ParamByName('IME').AsString := NULL;
TQuery.Post;

Komponenta TQueryUpdate pošalje ovaj Query:

INSERT INTO TABLE_A(ID, IME)
VALUES( '123456', NNULL)

na Microsoft SQL Server i prijavi grečku

Pitanje je kako zaobići tu grečku, naterati server da u tom slučaju 3b uradi ovo:

INSERT INTO TABLE_A(ID, IME)
VALUES( '123456', NULL)

Ne radim u delphi-ju, nego u programskom rešenju koje je napravljeno u delphi-ju. U njemu se programira slično kao u delphi-ju. U programu postoji komponenta koja sadrži SQL-ove, ima i parametre, po potrebi ih šalje na SQL server(kao u Delphiju).







[ Vic @ 09.04.2008. 12:56 ] @
Citat:
DarkMan: NNULL ne postoji u SQL-u i zato ti izbacije gresku.


Ostaje ti da probas da umesto null prosledis ''.
[ DarkMan @ 09.04.2008. 13:22 ] @
Ajd probaj da u TQueryUpdate.InsertSQL ubacis ovaj sql:

Code:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, (case when :IME is null then null else N:IME end))


Edit:

Nece moci, opet ce generisati NNULL i izbaciti gresku, probaj:

Code:

INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, convert(nvarchar, :IME) )