在客户端我用ADO执行了两个带存储过程的SQL语句,
两个存储过程都是类假如下的结构:
declare MYCUR CURSOR
FOR (SELECT A FROM TB)
OPEN MYCUR
FETCH NEXT FROM MYCUR INTO @A
while @@fetch_status = 0
begin
update tb set I=I+1 where a=@A
FETCH NEXT FROM MYCUR INTO @A
end
Close MYCUR
DEALLOCATE MYCUR然后客户端ADO 记录集打开一个多条TSQL语句的查询,类似这样:
set nocount on
select @a = a from TBA
select @b = b from TBB
select @C= @a -@b
select @C AS C
set nocount off
客户端记录集在打开后读C时,出现错误,说类型不匹配,调试时我发现前面去掉一个存储过程就正确了,这是什么异常的情况啊,请教各位大神们?????
两个存储过程都是类假如下的结构:
declare MYCUR CURSOR
FOR (SELECT A FROM TB)
OPEN MYCUR
FETCH NEXT FROM MYCUR INTO @A
while @@fetch_status = 0
begin
update tb set I=I+1 where a=@A
FETCH NEXT FROM MYCUR INTO @A
end
Close MYCUR
DEALLOCATE MYCUR然后客户端ADO 记录集打开一个多条TSQL语句的查询,类似这样:
set nocount on
select @a = a from TBA
select @b = b from TBB
select @C= @a -@b
select @C AS C
set nocount off
客户端记录集在打开后读C时,出现错误,说类型不匹配,调试时我发现前面去掉一个存储过程就正确了,这是什么异常的情况啊,请教各位大神们?????
DECLARE @count INT --记录数
DECLARE @PartID INT --临时存放idDECLARE @tmp VARCHAR(50)DECLARE @tmpDB TABLE (ID INT IDENTITY(1,1) PRIMARY KEY,PartID INT) --创建表变量INSERT INTO @tmpDB SELECT ID FROM TEST2 --将表ID添加入表变量
SELECT @count = COUNT(1) FROM @tmpDB --查询出表变量的记录数
IF @count >0
BEGIN
SET @i = 1 --初始化循环变量
WHILE (@I <= @count )
BEGIN
SELECT @PartID = PartID FROM @tmpDB WHERE ID = @I --查出第一个子标ID
SELECT @tmp = A FROM TEST2 WHERE ID =@PartID
--PRINT @I
PRINT @tmp
SELECT @I =@I+1 --循环递增
END
END
我估计是那个该死的游标,因两个存储过程中都有用到游标,估计是资源死锁了,请问下大牛对不对?
我现在自己写了一个代替方案,如上,请教大牛,这样可以么?
DECLARE @count INT --记录数
DECLARE @PartID INT --临时存放idDECLARE @tmp VARCHAR(50)DECLARE @tmpDB TABLE (ID INT IDENTITY(1,1) PRIMARY KEY,PartID INT) --创建表变量INSERT INTO @tmpDB SELECT ID FROM TEST2 --将表ID添加入表变量
SELECT @count = COUNT(1) FROM @tmpDB --查询出表变量的记录数
IF @count >0
BEGIN
SET @i = 1 --初始化循环变量
WHILE (@I <= @count )
BEGIN
SELECT @PartID = PartID FROM @tmpDB WHERE ID = @I --查出第一个子标ID
SELECT @tmp = A FROM TEST2 WHERE ID =@PartID
--PRINT @I
PRINT @tmp
SELECT @I =@I+1 --循环递增
END
END
我估计是那个该死的游标,因两个存储过程中都有用到游标,估计是资源死锁了,请问下大牛对不对?
我现在自己写了一个代替方案,如上,请教大牛,这样可以么?
看语法应该没什么问题.