Funkcja replace w triggerach MS SQL Server 2005
lukasz_otwinowski@yahoo.pl - 12-07-2007 00:09
Funkcja replace w triggerach MS SQL Server 2005
Witam,
Mam mały problem z funkcją REPLACE w triggerze. Po krótce wytłumaczę co chcę osiągnąć:
Storzyłem tabelę składającą się z 20 kolumn: Opis1, Opis1a,... Opis10, Opis10a Następnie stworzyłem triggera on update, który przy update'cie kolumny Opis1 automatycznie przepisuje wartość do kolumny Opis1a (tak samo dla Opis2>>Opis2a... itd).
CREATE TRIGGER [updateOpisA] ON [CDN].[TwrOpis] FOR UPDATE AS BEGIN if update(Opis1) begin update [CDN].[TwrOpis] set Opis1a=Opis1 end END .. .. ..
Do tego momentu wszystko gra... problem pojawia się gdy z kolumny Opis1a (jak i Opis2a... Opis10a) chcę wyciąć znaczniki html'owe <b>, <u>, <i>. Używam do tego funkcji REPLACE lecz niestety coś nie gra...
BEGIN if update(Opis1) begin update [CDN].[TwrOpis] set Opis1a=Opis1 select Opis1a, replace (Opis1a, '<b>', ''), replace(Opis1a, '</b>', ''), replace (Opis1a, '<i>', ''), replace (Opis1a, '</i>', ''), replace (Opis1a, '<u>', ''), replace (Opis1a, '</u>', '') from [CDN].[TwrOpis] end END
To jest akurat ostatnia próba użycia funkcji replace. Próbowałem również następujących skłądni:
if update(Opis1) begin update [CDN].[TwrOpis] set Opis1a=Opis1 set Opis1a= replace (Opis1a, '<b>', '') from [CDN].[TwrOpis]
end
oraz:
select replace(Opis1a, '<b>', '')
JEDNAK NIE DZIAŁA!!!!!!!!! PROSZĘ O POMOC!!!!!!!!!!!!!!!!!!!!!!!
Adam =?iso-8859-2?Q?Wi=B6niecki?= - 12-07-2007 00:09
On 2007-07-11, lukasz_otwinowski@yahoo.pl <lukasz_otwinowski@yahoo.pl> wrote:
> Do tego momentu wszystko gra... problem pojawia się gdy z kolumny > Opis1a (jak i Opis2a... Opis10a) chcę wyciąć znaczniki html'owe <b>, ><u>, <i>. Używam do tego funkcji REPLACE lecz niestety coś nie gra... > > BEGIN > if update(Opis1) > begin > update [CDN].[TwrOpis] > set Opis1a=Opis1 > select Opis1a, replace (Opis1a, '<b>', ''), replace(Opis1a, '</b>', > ''), replace (Opis1a, '<i>', ''), replace (Opis1a, '</i>', ''), > replace (Opis1a, '<u>', ''), replace (Opis1a, '</u>', '') > from [CDN].[TwrOpis] > end > END
A jednak działa:
CREATE PROCEDURE test AS BEGIN DECLARE @str VARCHAR( 64 ) SELECT @str = '<b>Ala</b> ma kota'; PRINT @str; SELECT @str = replace( @str, '<b>', '' ); PRINT @str; SELECT @str = replace( @str, '</b>', '' ); PRINT @str; END
-- Adam Wiśniecki
lukasz_otwinowski@yahoo.pl - 12-07-2007 00:09
On 11 Lip, 12:02, Adam Wiśniecki <USUNTO.adam.wisniecki.TOROWN...@gmail.com> wrote: > On 2007-07-11, lukasz_otwinow...@yahoo.pl <lukasz_otwinow...@yahoo.pl> wrote: > > > Do tego momentu wszystko gra... problem pojawia się gdy z kolumny > > Opis1a (jak i Opis2a... Opis10a) chcę wyciąć znaczniki html'owe <b>, > ><u>, <i>. Używam do tego funkcji REPLACE lecz niestety coś nie gra.... > > > BEGIN > > if update(Opis1) > > begin > > update [CDN].[TwrOpis] > > set Opis1a=Opis1 > > select Opis1a, replace (Opis1a, '<b>', ''), replace(Opis1a, '</b>', > > ''), replace (Opis1a, '<i>', ''), replace (Opis1a, '</i>', ''), > > replace (Opis1a, '<u>', ''), replace (Opis1a, '</u>', '') > > from [CDN].[TwrOpis] > > end > > END > > A jednak działa: > > CREATE PROCEDURE test > AS BEGIN > DECLARE @str VARCHAR( 64 ) > SELECT @str = '<b>Ala</b> ma kota'; > PRINT @str; > SELECT @str = replace( @str, '<b>', '' ); > PRINT @str; > SELECT @str = replace( @str, '</b>', '' ); > PRINT @str; > END > > -- > Adam Wiśniecki
Może w procedurze działa, spróbuj w triggerze
Adam =?iso-8859-2?Q?Wi=B6niecki?= - 12-07-2007 00:09
On 2007-07-11, lukasz_otwinowski@yahoo.pl <lukasz_otwinowski@yahoo.pl> wrote:
> Może w procedurze działa, spróbuj w triggerze
Wykorzystaj podany wcześniej kod w wyzwalaczu a później mów, że nie działa. Jeżeli nadal twierdzisz, że nie działa pokaż kod wyzwalacza (tylko 'esencja' bez zbędnych elementów).
-- Adam Wiśniecki
lukasz_otwinowski@yahoo.pl - 12-07-2007 00:09
On 11 Lip, 14:11, Adam Wiśniecki <USUNTO.adam.wisniecki.TOROWN...@gmail.com> wrote: > On 2007-07-11, lukasz_otwinow...@yahoo.pl <lukasz_otwinow...@yahoo.pl> wrote: > > > Może w procedurze działa, spróbuj w triggerze > > Wykorzystaj podany wcześniej kod w wyzwalaczu a później mów, > że nie działa. Jeżeli nadal twierdzisz, że nie działa pokaż > kod wyzwalacza (tylko 'esencja' bez zbędnych elementów). > > -- > Adam Wiśniecki
Zastosowałem identyczną składnie w triggerze, mianowicie:
CREATE TRIGGER [updateOpisA] ON [CDN].[TwrOpis] FOR UPDATE AS BEGIN if update(Opis1) begin update [CDN].[TwrOpis] set Opis1a=Opis1 end
if update(Opis1a) begin select Opis1a= replace (Opis1a, '<b>', '') end end
I wyskakuje mi błąd: Error 207: Invalid column name 'Opis1a' chociaż taka kolumna istnieje
Adam =?iso-8859-2?Q?Wi=C5=9Bniecki?= - 12-07-2007 00:09
On 2007-07-11, lukasz_otwinowski@yahoo.pl <lukasz_otwinowski@yahoo.pl> wrote:
> Zastosowałem identyczną składnie w triggerze, mianowicie: > > CREATE TRIGGER [updateOpisA] ON [CDN].[TwrOpis] > FOR UPDATE > AS > BEGIN > if update(Opis1) > begin > update [CDN].[TwrOpis] > set Opis1a=Opis1 > end > > if update(Opis1a) > begin > select Opis1a= replace (Opis1a, '<b>', '') > end > end
Ech...
ALTER TRIGGER [updateOpisA] ON [TwrOpis] FOR UPDATE AS BEGIN if update(Opis1) begin update [TwrOpis] set Opis1a = replace( Opis1, '<b>', '' ) end end
> > I wyskakuje mi błąd: Error 207: Invalid column name 'Opis1a' chociaż > taka kolumna istnieje >
-- Adam Wiśniecki
Borafu - 12-07-2007 00:09
lukasz_otwinowski@yahoo.pl pisze: > if update(Opis1a) > begin > select Opis1a= replace (Opis1a, '<b>', '') > end > > I wyskakuje mi błąd: Error 207: Invalid column name 'Opis1a' chociaż > taka kolumna istnieje
Istnieje, ale w jakiej tabeli? Pytanie istotne, bo zleciłeś do wykonania jakieś działanie, a dokładnie to:
select Opis1a= replace (Opis1a, '<b>', '')
ale nie wspomniałeś w poleceniu ani słowa o tym, której tabeli ono ma dotyczyć. Co więcej, nawet gdybyś dodał klauzulę "FROM [CDN].[TwrOpis]" to nie będzie to, o co Ci chodziło, bo pojechałbyś po całości, a chyba nie o to Ci chodziło.
Musisz wiedzieć na którym rekordzie była zmiana.
Krótko mówiąc -> Books Online -> "triggers" ;-)
Pozdr -- Borafu
lukasz_otwinowski@yahoo.pl - 12-07-2007 00:09
On 11 Lip, 15:12, Adam WiĹ niecki <USUNTO.adam.wisniecki.TOROWN...@gmail.com> wrote: > On 2007-07-11, lukasz_otwinow...@yahoo.pl <lukasz_otwinow...@yahoo.pl> wrote: > > > > > > > Zastosowałem identyczną składnie w triggerze, mianowicie: > > > CREATE TRIGGER [updateOpisA] ON [CDN].[TwrOpis] > > FOR UPDATE > > AS > > BEGIN > > if update(Opis1) > > begin > > update [CDN].[TwrOpis] > > set Opis1a=Opis1 > > end > > > if update(Opis1a) > > begin > > select Opis1a= replace (Opis1a, '<b>', '') > > end > > end > > Ech... > > ALTER TRIGGER [updateOpisA] ON [TwrOpis] > FOR UPDATE > AS > BEGIN > if update(Opis1) > begin > update [TwrOpis] > set Opis1a = replace( Opis1, '<b>', '' ) > end > end > > > > > I wyskakuje mi błąd: Error 207: Invalid column name 'Opis1a' chociaż > > taka kolumna istnieje > > -- > Adam WiĹ niecki- Ukryj cytowany tekst - > > - Pokaż cytowany tekst -
Przepraszam za stracone nerwy ale jestem początkującym jeżeli chodzi o triggery.
Z tego co mi napisałeś zrobiłem trigger:
ALTER TRIGGER [updateOpisA] ON [CDN].[TwrOpis] FOR UPDATE AS BEGIN if update(Opis1) begin update [CDN].[TwrOpis] set Opis1a = replace( Opis1, '<b>', '' ) end end
Syntax niby jest poprawny, lecz gdy uruchamia się trigger wyskakuje błąd: "Error 8116: Argument data type text is invalid for argument 1 of replace function"
Adam =?iso-8859-2?Q?Wi=B6niecki?= - 14-07-2007 00:02
On 2007-07-11, lukasz_otwinowski@yahoo.pl <lukasz_otwinowski@yahoo.pl> wrote:
> Z tego co mi napisałeś zrobiłem trigger: > > ALTER TRIGGER [updateOpisA] ON [CDN].[TwrOpis] > FOR UPDATE > AS > BEGIN > if update(Opis1) > begin > update [CDN].[TwrOpis] > set Opis1a = replace( Opis1, '<b>', '' ) > end > end > > > Syntax niby jest poprawny, lecz gdy uruchamia się trigger wyskakuje > błąd: "Error 8116: Argument data type text is invalid for argument 1 > of replace function"
Domyślam się, że Opis1 i Opis1a są typu text.
update [TwrOpis] set Opis1a = replace( cast( Opis1 as varchar( 8000 ) ), '<b>', '' )
-- Adam Wiśniecki
Otwin - 17-07-2007 00:00
On 13 Lip, 11:23, Adam Wiśniecki <USUNTO.adam.wisniecki.TOROWN...@gmail.com> wrote: > On 2007-07-11, lukasz_otwinow...@yahoo.pl <lukasz_otwinow...@yahoo.pl> wrote: > > > > > > > Z tego co mi napisałeś zrobiłem trigger: > > > ALTER TRIGGER [updateOpisA] ON [CDN].[TwrOpis] > > FOR UPDATE > > AS > > BEGIN > > if update(Opis1) > > begin > > update [CDN].[TwrOpis] > > set Opis1a = replace( Opis1, '<b>', '' ) > > end > > end > > > Syntax niby jest poprawny, lecz gdy uruchamia się trigger wyskakuje > > błąd: "Error 8116: Argument data type text is invalid for argument 1 > > of replace function" > > Domyślam się, że Opis1 i Opis1a są typu text. > > update [TwrOpis] > set Opis1a = replace( cast( Opis1 as varchar( 8000 ) ), '<b>', '' ) > > -- > Adam Wiśniecki- Ukryj cytowany tekst - > > - Pokaż cytowany tekst -
DZIĘKUJĘ!!!!!!!!!!!!!!!!!!!!!!!!! DZIAŁA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?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ć ?
Zapytanie SQL z =?ISO-8859-2?Q?pust=B1_tabel=B1?=
=?iso-8859-2?q?Pytanie_SQL__spe=B3niaj=B1ce_wiecej_jak_jeden_ warunek_na_jednej_kolumnie=2E?=
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.xlx.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 |
|