有在PHP里用sqlsrv_query的吗?返回的记录集数量大于1条就获取不到OUTPUT参数值

efei 2011-05-06 12:57:00
存储过程类似这样:
CREATE PROCEDURE sp_test
@NickName nvarchar(30) OUTPUT
WITH ENCRYPTION AS
BEGIN
SET NOCOUNT ON
SET @NickName = '哈哈哈哈'
SELECT 1
-- SELECT 1 UNION SELECT 2
return 2
end
GO

如果不返回记录集,或者SELECT一条数据,可以获取到RETURN的值,以及OUPUT的值
但是如果SELECT了两条或者更多的数据,就获取不到RETURN、OUTPUT值了。

有谁知道怎么解决吗?

另外,如果OUTPUT的类型是字符串,即使获取到值,也只能获取到前面一个汉字。。。



在工具里测试能正确获取到值
declare @n nvarchar(30)
declare @r int
exec @r = sp_test @n output
print @r
print @n
...全文
747 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
basfgfcu 2012-06-05
  • 打赏
  • 举报
回复
我也碰到此问题,存储过程语句:
create procedure prc_tb1
@cloumn1 varchar(50) output,@cloumn2 varchar(50) output
as

@sql=@sql+'select clo_row1,clo_row2,clo_row3 from tb'

select cloumn1=cloumn from ck where cloumn=@cloumn1
select cloumn2=cloumn from ck where cloumn=@cloumn2

print @sql
exec(@sql)

求解:如何读取到@sql结果表,以及cloumn1、cloumn2;可在PHP中显示$row["clo_row1"];$row["cloumn1"];$row["cloumn2"]
efei 2011-06-02
  • 打赏
  • 举报
回复
后来无意中找到答案了

遇到这种情况,反复调用sqlsrv_next_result,直到它返回false,然后再取值就可以了
--小F-- 2011-05-06
  • 打赏
  • 举报
回复
在查询分析器里面执行是没有问题的 证明问题出在你PHP调用存储过程上 所以去检查你的调用
efei 2011-05-06
  • 打赏
  • 举报
回复
我不确定,所以来问问看

因为如果我只返回一条记录,那么是可以取到RETURN和OUTPUT的值,所以才搞不懂
AcHerat 2011-05-06
  • 打赏
  • 举报
回复
那你看看你PHP写调用SQL存储过程的语法语句正确不,存储过程在SQL里可以得到正确的结果那就不是SQL问题,应该是你PHP程序代码问题。
efei 2011-05-06
  • 打赏
  • 举报
回复
我是说一楼。。。回的这么快。

30个宽度足够写4个中文了
efei 2011-05-06
  • 打赏
  • 举报
回复
楼上的意思是?

在客户端工具里执行是没有问题,能够得到正确的完整的值

但是用PHP来执行sqlsrv_query查询就有问题

我是这个意思
AcHerat 2011-05-06
  • 打赏
  • 举报
回复
看你实际情况,把这个@NickName nvarchar(30)宽度放大点,试试!
快溜 2011-05-06
  • 打赏
  • 举报
回复
CREATE PROCEDURE sp_test
@NickName nvarchar(30) OUTPUT
WITH ENCRYPTION AS
BEGIN
SET NOCOUNT ON
SET @NickName = '哈哈哈哈'
--SELECT 1
SELECT 1 UNION SELECT 2
end
GO
declare @n nvarchar(30)
declare @r int
exec sp_test @n output

print @n

/*
-----------
1
2

哈哈哈哈

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧