2013-04-28 43 views
0

我試圖通過調用存儲過程來獲得一個名稱。在SQL Server中調用存儲過程來獲取一個Unicode字符串

SQL代碼:

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

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. 的字符串是用空白填充,如「名稱」
+0

得到很多命中您需要增加您的nvarchar()的大小,以便它不填充大於32的字符串 – Xerxes 2013-04-28 06:46:42

回答

0

你需要增加你爲nvarchar(大小),因此它不會截斷是大於32

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

+0

它不起作用,但謝謝你的回答。 – fuzhou 2013-04-28 07:55:02

0

好擺脫裝飾簡單地使用的字符串RTRIM(col)AS [col],以確定您需要的字符變量的長度,然後在您的情況下創建一個proc來查看您正在獲取的實際長度以及您需要定義的LEN(Originalcol)或DATALENGTH(Originalcol)http://msdn.microsoft.com/en-us/library/ms173486.aspx 。作爲它的一個變種,你不會通過使用NVARCHAR(MAX)

相關問題