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. 「名前」のように、文字列に空白が埋め込まれていた
4

2 に答える 2

0

32 より大きい文字列が切り捨てられないように、nvarchar() のサイズを大きくする必要があります。

wchar_t name[N];とのサイズを大きくする@name nvarchar(N) output

于 2013-04-28T06:48:04.233 に答える
0

トリムを取り除くには、単に RTRIM(col) AS [col] を使用して、必要な char 変数の長さを決定し、次に LEN(Originalcol) または DATALENGTH(Originalcol) http://msdn.microsoft.com/en-usを使用します。 /library/ms173486.aspxを使用して proc を作成し、取得している実際の長さと定義する必要があるものを確認します。単一の var であるため、NVARCHAR(MAX) を使用してもあまりヒットしません。

于 2013-04-28T09:42:22.247 に答える