[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.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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.pldoc.pisz.plpdf.pisz.plczterowers.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 |
|