中文问题

vinsonyue 2006-02-20 04:52:43
一个表,Table ( A Char(1),B Nchar(20))
有一笔记录: A,Null
Update Table Set B='啊' Where A='A'
那个'啊'将会是?号.
如果用
Update Table Set B=N'啊' Where A='A'
可以得到正确的结果.

如果建立一个存储过程:
Create Procedure DBO.Update @A Char(1),@B NChar(20)
As
Update Table Set B=@B Where A=@A

运行:Execute Procedure Update 'A','啊'
那个'啊'将还会是问号

请问在存储过程中应该怎样写?谢谢

...全文
52 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lzhs 2006-02-21
如果你是直接在Query Analyzer里调用的话,自己在调用的时候加上N。
如下:
Create Procedure DBO.Update @A Char(1),@B NChar(20)
As
Update Table Set B=@B Where A=@A

运行:Execute Procedure Update 'A',N'啊'

如果是在程序里,只要将传入参数的类型设置为NChar就可以了。

或者使用动态SQL语句,自己手工在“'”前加上N。
回复
vinsonyue 2006-02-21
declare @A Nchar(20)
select @A='啊'

print cast(@A as Nchar(20))
print convert(Nchar(20),@A)

这个我早就试过了,不行,还是显示问号.

如果select @A=N'啊'是可以.但存储过程传参数的话是没有那个N 的,所以还是有问题.

请各位继续给多些方法.谢谢
回复
sunyong790903 2006-02-20

Create table ttt1 (A Char(1),B NChar(20))
insert ttt1 select 'A','我'

select * from ttt1

create proc DBO.ttt1_Update @A char(1),@B Nchar(20)
as
update ttt1 set B=convert(nchar(20),@B) where A=@A

exec ttt1_update 'A','啊'
回复
wgsasd311 2006-02-20
--TRY
Create Procedure DBO.[Update] (@A Char(1),@B NChar(20))
As
Update [Table] Set B=CAST(@B AS NCHAR(20)) Where A=@A
回复
wgsasd311 2006-02-20
--TRY
Create Procedure DBO.Update @A Char(1),@B NChar(20)
As
Update Table Set B=CAST(@B AS NCHAR(20) Where A=@A

回复
vinsonyue 2006-02-20
UP
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-02-20 04:52
社区公告
暂无公告