SQL Error 22002 没有提供需要的指示器变量

[Microsoft][ODBC SQL Server Driver]没有提供需要的指示器变量

 

SQLState 22002: Indicator variable required but not supplied

 

http://support.microsoft.com/kb/158618/en-us/

 

对于数据库中的TEXT数据, 如果在读的时候绑定的指示器变量(用来返回长度的变量)为NULL,

而数据内容也是null时, SQL试图通过指示器变量返回SQL_NULL_DATA 标志而失败.

 对于数值类型的output参数,如果在存储过程返回时候是NULL(一般很少吧),也会提示这个错误.

SQLRETURN SQLBindParameter(
     SQLHSTMT     StatementHandle,
     SQLUSMALLINT     ParameterNumber,
     SQLSMALLINT     InputOutputType,
     SQLSMALLINT     ValueType,
     SQLSMALLINT     ParameterType,
     SQLUINTEGER     ColumnSize,
     SQLSMALLINT     DecimalDigits,
     SQLPOINTER     ParameterValuePtr,
     SQLINTEGER     BufferLength,
     SQLINTEGER *     StrLen_or_IndPtr);	// 这个就是"指示器变量"
SQLRETURN SQLBindCol(
     SQLHSTMT     StatementHandle,
     SQLUSMALLINT     ColumnNumber,
     SQLSMALLINT     TargetType,
     SQLPOINTER     TargetValuePtr,
     SQLINTEGER     BufferLength,
     SQLLEN *     StrLen_or_Ind);	// 这个就是"指示器变量"
解决方案:
(1)不要把StrLen_or_Ind指定为NULL
(2)给所有字段指定默认值
(3)如果是存储过程, 在存储过程中对null数据进行判断

@varName = ISNULL(COL_NAME,  '')   -- 把null用空串代替

 

 

另外:

如果调用存储过程的语句指定的参数数量, 和存储过程实际需要的参数数量不一致, 也会提示这个错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值