日期:2014-05-17  浏览次数:20650 次

請問varchar為非unicode能否用觸發器觸發數據到nvarchar?
情況:首先Varchar數據為非unicode編碼,我需要通過觸發器觸發insert和update數據到nvarchar數據表內,varchar所錄入的數據為外文,例如:???óíúé,那麼我該如何寫觸發器才能正確的觸發內容到nvarchar;

insert into tb_vmember (c_vclass,c_vname,c_vtext) values (N'???úíá?',N'測試102',N'???úíá?')
--這個是insert數據到varchar數據庫表//


ALTER TRIGGER [dbo].[insVToNv] 
   ON  [dbo].[tb_vmember] 
   FOR INSERT
AS
BEGIN
if TRIGGER_NESTLEVEL()>1
return
insert into [DBNVarchar].[dbo].[tb_member](c_name,c_class,c_text)
select tbv.c_vname,tbv.c_vclass,tbv.c_vtext
from tb_vmember tbv,inserted i
where tbv.c_id=i.c_id 
END
--這個是varchar類型數據庫tb_vmember的觸發器


經過測試insert外文數據到varchar數據表tb_vmember,觸發器觸發insert數據到nvarchar數據表tb_member內,但外文不能正常顯示這是為何?
Unicode SQL varchar nvarchar

------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (cn nvarchar(14),c nvarchar(18))
insert into [TB]
select N'???úíá?','jlsdkfjsd'

select * from [TB]


INSERT INTO TB(c)
SELECT '???úíá?'   --插入到varchar 中的非unicode字符,就已经是???úíá?了。触发器处理后也无法再nvarchar显示正常

INSERT INTO TB(cn)
SELECT c
FROM dbo.TB
WHERE c =  '???úíá?'


/*
cn c
???úíá? jlsdkfjsd
NULL ???úíá?
???úíá? NULL*/


参考
------解决方案--------------------
數據一直正在使用當中,且數據量非常大
--> 找系统闲时就能修改呀,例如深夜.
    建议尽量往这方面去考虑问题喔.