当前位置: 代码迷 >> PB >> sql.sqlnrows在什么情况下能返回-2
  详细解决方案

sql.sqlnrows在什么情况下能返回-2

热度:90   发布时间:2016-04-29 06:26:11.0
sql.sqlnrows在什么情况下会返回-2
最近将一个数据库从sql server2000下移植到sql anywhere9下,可是意外确发生了,在一些判断sqlca状态的语句处用到sqlnrows总是返回-2
语句如下
SELECT isnull ( spare_cash , '' ) INTO :ls_spare_cash FROM t_vip_info WHERE vip_status <> '0' and vip_no =:as_vip_no  USING sqlca;
//上面语句返回1正常
SELECT card_no , card_dispno , IsNull ( is_saving , '0' ) INTO :ls_card_no, :ls_card_dispno, :ls_is_saving FROM t_vipcard_info WHERE vip_no =:as_vip_no and card_status ='2'  USING sqlca;
//这个语句返回-2请问错在哪里?




------解决方案--------------------
is_saving 是变量吗
------解决方案--------------------
看一下SQLErrText
------解决方案--------------------
怀疑你的select返回多行了,select语句返回一行数据是正确的,如果返回多行数据的话,需要用游标或者数据窗口来实现

改成以下代码看一下

long ll_cnt
SELECT count(1) INTO :ll_cnt
FROM t_vipcard_info
WHERE vip_no =:as_vip_no and card_status ='2' USING sqlca;

messagebox('', ll_cnt)
------解决方案--------------------
回去也试试!
------解决方案--------------------
SQLNRows Long The number of rows affected (the database vendor supplies this number, so the meaning might not be the same in every DBMS).

这个参数的值跟数据库相关,不同数据库供应商是不一样的,你得了解 sql anywhere9 的参数
------解决方案--------------------
引用:
但也奇怪,
select top 1 seq into :as_seq from bill_head where acct_blno = '030905000012';
在上面情况,会返回正确的sqlca.sqlnrows
select  seq into :as_seq from bill_head where acct_blno = '030905000012';
 返回 (-262……



估计是和数据库有关的问题

建议你用top 1或者max之类的函数,确保返回行数为1,应该就不会有这个问题了,别纠结了
------解决方案--------------------
有空就研究,没空就别纠结了,如果还有点闲,去看看
http://topic.csdn.net/u/20121011/18/b5afded5-0f27-429c-a5d3-a8220dd195b3.html
也是个不错的选择。斑竹,给我的问题发个链接,不算广告吧
------解决方案--------------------
引用:
select top 1 seq into :as_seq from bill_head where acct_blno = '030905000012';
在上面情况,会返回正确的sqlca.sqlnrows=1
select seq into :as_seq from bill_head where acct_blno = '030905000012';
 返回 sqlca.sqlnro……


为啥这样做?pb内嵌sql很明确说明了不允许select into有多行值,详见help
Description 
Selects a row in the tables specified in RestOfSelectStatement.
是‘a row’,我只在selectblob用nrows。
至于楼主提的最先的那个问题,建议看看sqlerrtext是啥,不同数据库不一样的
------解决方案--------------------
一同学习了。
  相关解决方案