繁体   English   中英

在SQL Server中调用存储过程以获取Unicode字符串

[英]Calling a stored procedure in SQL Server to get a unicode string

我试图通过调用存储过程来获取名称。

sql代码:

create procedure GetName
@ID int,
@name nvarchar(32) output
as
select @name=name from SalesInfo where ID=@ID

C代码

...
SQLRETURN rc;
SQLLEN cbParam = SQL_NTS;
int ID = 1;
wchar_t name[32];

rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ID, 0, NULL);
rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT_OUTPUT, SQL_C_WCHAR, SQL_WCHAR, SQL_DESC_LENGTH, 0, name, sizeof(name), &cbParam);
rc = SQLExecDirect(hstmt, TEXT("{call GetName(?,?)}"), SQL_NTS);
  1. 我收到了一个字符串,但是出现错误消息,“字符串数据,右截断”
  2. 该字符串用空格填充,例如“ name”

您需要增加nvarchar()的大小,以免截断大于32的字符串

增加wchar_t name[N];的大小wchar_t name[N]; @name nvarchar(N) output

要摆脱修剪,只需使用RTRIM(col)AS [col]来确定所需的字符变量长度,然后确定LEN(Originalcol)或DATALENGTH(Originalcol) http://msdn.microsoft.com/zh-cn /library/ms173486.aspx ,以创建一个proc来查看实际长度以及需要定义的内容。 作为单个变量,使用NVARCHAR(MAX)不会对您造成太大影响

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM