0

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

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”
4

2 回答 2

0

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

增加尺寸wchar_t name[N];@name nvarchar(N) output

于 2013-04-28T06:48:04.233 回答
0

摆脱修剪只需使用 RTRIM(col) AS [col] 来确定您需要的字符变量的长度,然后是 LEN(Originalcol) 或 DATALENGTH(Originalcol) http://msdn.microsoft.com/en-us /library/ms173486.aspx在您的情况下创建一个 proc 以查看您获得的实际长度以及您需要定义的内容。作为一个单一的变量,你不会通过使用 NVARCHAR(MAX)

于 2013-04-28T09:42:22.247 回答