ďťż
 
[MSSQL 2000] konwersja typów - czy potrzebna? ďťż
 
[MSSQL 2000] konwersja typów - czy potrzebna?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MSSQL 2000] konwersja typów - czy potrzebna?



Krzysztof Wiśniewski - 29-12-2005 14:58
[MSSQL 2000] konwersja typów - czy potrzebna?
  W tabeli mam pole nvarchar(100). Czy mogę do niego bez problemu wstawiać - z
użyciem procedury, triggera etc. - dane ze zmiennych w innych formatach?

Np. jeśli mam coś takiego w triggerze:

DECLARE @zmienna1 bit

albo:
DECLARE @zmienna1 bigint
DECLARE @zmienna1 varchar(30)

SELECT @zmienna1 = ID FROM deleted

to czy mogę bez problemu wykonać:

INSERT INTO tabela (Pole1,Pole2) SELECT @zmienna1, inne_pole from inserted

nie zwracając uwagi, że wstawiana zmienna ma inny format, niż pole, do
której pakuję jej treść?

Jeśli nie mogę, to w jaki sposób dokonać jawnej konwersji zmiennej do
nvarchar(100)?

--
Pozdrawiam,
Krzysiek





GREGOR - 29-12-2005 14:58

  1. Należy pamietać, że tabele inserted i deleted moga zawierać więcej niż
jeden rekord,
i trzeba to uwzględnić w SELECT @zmienna1 = ID FROM deleted,
jesli deleted zawiera 5 rekordów to kto zgadnie jaką wartośc przyjmie
@zmienna1?

2. Zagadnienie konwersji to temat rzeka. Nawet jawna konwersja nie zawsze
będzie
wykonywała się poprawnie. Przykładem może być konwersja tekstu 3e23 na
int
lub w tym przypadku dłuższy tekst np. char(255) na nvarchar(100)

3. Co zrobić aby się zmieścił?
- jeśli pakujemy tekst to dać np left(inne_pole, 100)
- jeśli liczbę to np. ltrim(inne_pole)
- jesli data to np. convert(varchar(19), inne_pole, 120)

pozdr
GREGOR

Użytkownik "Krzysztof Wiśniewski" <ktuvok@poczta.onet.pl> napisał w
wiadomości news:dou2qp$1pn$1@news.onet.pl...
>W tabeli mam pole nvarchar(100). Czy mogę do niego bez problemu wstawiać -
>z
> użyciem procedury, triggera etc. - dane ze zmiennych w innych formatach?
>
> Np. jeśli mam coś takiego w triggerze:
>
> DECLARE @zmienna1 bit
>
> albo:
> DECLARE @zmienna1 bigint
> DECLARE @zmienna1 varchar(30)
>
> SELECT @zmienna1 = ID FROM deleted
>
> to czy mogę bez problemu wykonać:
>
> INSERT INTO tabela (Pole1,Pole2) SELECT @zmienna1, inne_pole from
> inserted
>
> nie zwracając uwagi, że wstawiana zmienna ma inny format, niż pole, do
> której pakuję jej treść?
>
> Jeśli nie mogę, to w jaki sposób dokonać jawnej konwersji zmiennej do
> nvarchar(100)?
>
> --
> Pozdrawiam,
> Krzysiek
>
>




Krzysztof Wiśniewski - 29-12-2005 14:59

  Użytkownik "GREGOR" <gg@teleaudio.ciach.com.pl> napisał w wiadomości
news:doue0p$9ea$1@news.telbank.pl...
| 1. Należy pamietać, że tabele inserted i deleted moga zawierać więcej niż
| jeden rekord,
| i trzeba to uwzględnić w SELECT @zmienna1 = ID FROM deleted,
| jesli deleted zawiera 5 rekordów to kto zgadnie jaką wartośc przyjmie
| @zmienna1?

Akurat tę kwestię mam załatwioną - aplikacja pozwala operować tylko na
pojedynczych rekordach.

| 2. Zagadnienie konwersji to temat rzeka. Nawet jawna konwersja nie zawsze
| będzie
| wykonywała się poprawnie. Przykładem może być konwersja tekstu 3e23 na
| int
| lub w tym przypadku dłuższy tekst np. char(255) na nvarchar(100)
|
| 3. Co zrobić aby się zmieścił?
| - jeśli pakujemy tekst to dać np left(inne_pole, 100)
| - jeśli liczbę to np. ltrim(inne_pole)
| - jesli data to np. convert(varchar(19), inne_pole, 120)

Rzecz nie w tym, by zmieścić dane w polu, ale by nie pojawił się błąd.
Chodziło mi o to, czy dane zapisane w zmiennej typu bit, int, bigint albo
varchar(x) można bez jakiejkolwiek wymuszonej konwersji zapakować do pola
typu nvarchar(x+10). I tylko tyle.

Pozdrawiam,
Krzysiek




GREGOR - 29-12-2005 14:59

  > Rzecz nie w tym, by zmieścić dane w polu, ale by nie pojawił się błąd.
> Chodziło mi o to, czy dane zapisane w zmiennej typu bit, int, bigint albo
> varchar(x) można bez jakiejkolwiek wymuszonej konwersji zapakować do pola
> typu nvarchar(x+10). I tylko tyle.

Odpowiedź brzmi NIE.

Wynika to z "czarnych kropek" w diagramie; "MSSQL Server BOL"

http://e-singiel.pl/images/CONVERT.jpg

Z ludzkich typów nie da sie w locie przenieść:
- money
- smallmoney

Jeśłi zabezpieczysz sie przed "czarnymi kropkami" to odpowiedź częściowo
brzmi "TAK"

pozdr
GREGOR
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= [MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?= MSSQL Express czy Oracle Express MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?= [MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?= Pobierananie danych z innej bazy danych w MSSQL Migracja MSSQL 2005 CTP na 2005 Express MSSQL , funkcja pobierajaca sama date (bez czasu) w funkcji [mssql] insert do tabeli na podstawie danych z innej tabeli
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • czterowers.keep.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com