PDA

View Full Version : مشکل trigger با ntext



ClaimAlireza
سه شنبه 20 شهریور 1386, 13:58 عصر
با سلام...

چرا trigger نمیتونه با ntext کار کنه و error میده...

راه حل این مشکل چیه؟

من یه سری جدول دارم که بعضی از فیلداشون باید ntext باشه و برای جمع آوری اطلاعات از trigger استفاده می کنم.

AminSobati
سه شنبه 20 شهریور 1386, 14:18 عصر
ممکنه کد Trigger رو پست کنین؟

ClaimAlireza
سه شنبه 20 شهریور 1386, 14:42 عصر
CREATETRIGGER tr_insert
ON tb_news
AFTER insert
ASBEGIN
declare @se_id bigint
declare @r1 nvarchar(4000)
declare @r2 ntext
declare @lang nvarchar(50)
select @se_id=n_id from inserted
select @r1=subject from inserted
select @r2=body from inserted
select @lang=lang from inserted
insertinto tb_search(se_id, r1, r2, tbname, lang)values(@se_id, @r1, @r2,'tb_news', @lang)
END
GO

AminSobati
سه شنبه 20 شهریور 1386, 20:40 عصر
میتونین کاری شبیه به این انجام بدین:



INSERT tb_search(F1, F2, F3) SELECT Col1,Col2,'tb_news' FROM Inserted

ClaimAlireza
چهارشنبه 21 شهریور 1386, 08:56 صبح
جناب ثباتی عزیز مشکل اینجاست که از همون اول قسمت


declare @r2 ntext


رو error میده.

میگه نمیتونید نوع ntext,image,text رو استفاده کنین.

اگر هم نوع را به nvarchar تغییر بدم اونوقت حتما باید ستون جدول مربوطه(body) رو هم به nvarchar تغییر بدم.

ولی body باید حتما ntext باشه....

با تشکر....

AminSobati
چهارشنبه 21 شهریور 1386, 09:27 صبح
ببینین این کمک میکنه؟


create table t(c1 int primary key, c2 ntext)
create table t2(c1 int primary key, c2 ntext)
go

create trigger t1 on t after insert as
insert t2 select t.* from inserted i join t on t.c1=i.c1
go

insert t select 1,'Hello World'
go

select * from t
select * from t2


نیازی به تعریف متغیر هم نیست

ClaimAlireza
چهارشنبه 21 شهریور 1386, 10:07 صبح
امتحانش کردم ولی نمیشه trigger رو ایجاد کنم.

error زیر رو دوباره میده:



Msg 311, Level 16, State 1, Procedure tr_insert, Line 10
Cannot use text, ntext, or image columns in the 'inserted' and 'deleted' tables.


الیته اگه ستون جدول رو به nvarchar تغییر بدم مشکلی نیست.

راستی جناب ثباتی اون join برای چیه ؟



i join t on t.c1=i.c1

AminSobati
چهارشنبه 21 شهریور 1386, 10:27 صبح
من این کد رو در 2005 تست کردم و مشکلی نداشتم. شما عینا کد من رو تست کردین و Error داد؟
Join برای اینه که فیلد ntext رو در Trigger استفاده نکنیم و بجاش از اصل جدول استخراجش کنیم

ClaimAlireza
چهارشنبه 21 شهریور 1386, 10:38 صبح
من چون نفهمیده بودم join برای چی داره استفاده میشه ازش استفاده نکرده بودم حالا که join رو قرار دادم مسئله حل شد.

حالا i که با جدول اصلی join شده چیه؟

البته ببخشید اینقدر سوال می پرسم ... حس یادگیری خیلی شیرینه!!

ممنون از پیگیریتون...

AminSobati
چهارشنبه 21 شهریور 1386, 10:43 صبح
حالا i که با جدول اصلی join شده چیه؟



Alias برای Inserted