情況:首先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*/
参考
------解决方案--------------------
數據一直正在使用當中,且數據量非常大
--> 找系统闲时就能修改呀,例如深夜.
建议尽量往这方面去考虑问题喔.