[MS SQL 2000] jak wymusić konwersję
Krzysztof Wiśniewski - 19-01-2006 09:33
[MS SQL 2000] jak wymusić konwersję
Mam taką funkcję:
CREATE FUNCTION dbo.MojaFunkcja (@Ilosc bigint, @Par1 int, @Par2 int) RETURNS bigint AS BEGIN DECLARE @Zwroc bigint; /* jakieś tam operacje na tych zmiennych */ RETURN @Zwroc; END
Jeśli wywołuję ją w sposób następujący: EXEC dbo.MojaFunkcja @Ilosc = 'NULL', @Par1 = 1, @Par2 = 2;
to dostaję błąd: "Error converting data type varchar to bigint."
Szlag mnie trafia, bo próbowałem już wszystkiego, np: SELECT dbo.MojaFunkcja(CONVERT(bigint, @Ilosc),1,2)
albo: SELECT dbo.MojaFunkcja(ISNULL(@Ilosc,0),1,2)
i nawet wariant z CASE'ami, ale nic nie pomaga...
Pomóżcie...
-- Pozdrawiam, Krzysiek
AreKc - 19-01-2006 09:33
Krzysztof Wiśniewski napisał:
> EXEC dbo.MojaFunkcja @Ilosc = 'NULL', @Par1 = 1, @Par2 = 2;
Czy nie powinno być "@Ilosc = NULL"?
-- AreKc
Krzysztof Wiśniewski - 19-01-2006 09:33
Użytkownik "AreKc" <arekc@asterdotnet.pl> napisał w wiadomości news:43cd6e0c$0$17929$f69f905@mamut2.aster.pl... | Krzysztof Wiśniewski napisał: | | > EXEC dbo.MojaFunkcja @Ilosc = 'NULL', @Par1 = 1, @Par2 = 2; | | Czy nie powinno być "@Ilosc = NULL"? |
Oczywiście że tak, tylko w przypadku przypisania wartości NULL funkcja działa prawidłowo. Problem polega na tym, że niekiedy korzysta ona z danych ściąganych z innych zbiorów, gdzie NULL jest interpretowane (zapisane?) jako string, a więc ujęte w apostrofy.
Zresztą zamiast 'NULL' mógłbym napisać 'cokolwiek', chodzi mi o wymuszenie konwersji jakiegoś stringu do wartości zero, gdy ten string nie da się zinterpretować jako liczbę.
Pozdrawiam, Krzysiek
AreKc - 19-01-2006 09:33
Krzysztof Wiśniewski napisał(a):
> Oczywiście że tak, tylko w przypadku przypisania wartości NULL funkcja > działa prawidłowo. Problem polega na tym, że niekiedy korzysta ona z > danych ściąganych z innych zbiorów, gdzie NULL jest interpretowane > (zapisane?) jako string, a więc ujęte w apostrofy.
Musisz chyba przeprowadzić konwersję na zewnątrz funkcji. Upewnij się, że w "danych ściąganych z innych zbiorów" nie będzie apostrofów.
-- AreKc
Grzesiek G. - 19-01-2006 09:33
Krzysztof Wiśniewski napisał(a): > Użytkownik "AreKc" <arekc@asterdotnet.pl> napisał w wiadomości > news:43cd6e0c$0$17929$f69f905@mamut2.aster.pl... > | Krzysztof Wiśniewski napisał: > | > | > EXEC dbo.MojaFunkcja @Ilosc = 'NULL', @Par1 = 1, @Par2 = 2; > | > | Czy nie powinno być "@Ilosc = NULL"? > | > > Oczywiście że tak, tylko w przypadku przypisania wartości NULL funkcja > działa prawidłowo. Problem polega na tym, że niekiedy korzysta ona z danych > ściąganych z innych zbiorów, gdzie NULL jest interpretowane (zapisane?) jako > string, a więc ujęte w apostrofy. > > Zresztą zamiast 'NULL' mógłbym napisać 'cokolwiek', chodzi mi o wymuszenie > konwersji jakiegoś stringu do wartości zero, gdy ten string nie da się > zinterpretować jako liczbę.
CREATE FUNCTION dbo.MojaFunkcja (@Ilosc VARCHAR, @Par1 int, @Par2 int) RETURNS bigint AS BEGIN DECLARE @Zwroc bigint;
SET @Zwroc = ( SELECT CASE WHEN @Ilosc = 'NULL' THEN 0 ELSE CAST(@Ilosc AS BIGINT) END )
RETURN @Zwroc; END
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[oracle] - Oracle SQL Developer - co to jest SID?
=?ISO-8859-2?Q?[Oracle]_Wywo=B3anie_skryptu_sh_z_PL/SQL-a=3F=3F?=
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
zanotowane.pldoc.pisz.plpdf.pisz.pllunadance.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|