【发布时间】:2017-09-25 22:40:25
【问题描述】:
我编写了一个存储过程,在 SSMS 中执行时可以正常工作,但在代码中却不行。在代码中,我似乎不喜欢我试图返回一个变量。这会是什么原因?我尝试将output 添加到SELECT @soLineNumber 语句中,但这不起作用。
我得到的错误:在调试期间将鼠标悬停在记录集上时 - “在对应的集合中找不到该项目......”当我“观察”变量时,它只是说它是关闭。
ALTER PROCEDURE [dbo].[rt_sp_aof_loStart]
AS
BEGIN
DECLARE @soLineNumber varchar(50)
SELECT
TOP 1 @soLineNumber = lQ.[SO_LINE_NUMBER]
FROM
[ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ORDER_LINE_QUEUE] AS lQ
LEFT JOIN [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ORDER_QUEUE] AS oQ
ON oQ.[SALES_ORDER_NUMBER] = lQ.[SALES_ORDER_NUMBER]
WHERE
lQ.[SELECTED] = 'False' AND
lQ.[COMPLETED] = 'False'
ORDER BY
lQ.[SELECTED] DESC,
lQ.[COMPLETED] ASC
--
UPDATE
[ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ORDER_LINE_QUEUE]
SET
[SELECTED] = 'True'
WHERE
[SO_LINE_NUMBER] = @soLineNumber
--
SELECT @soLineNumber
END
运行一个简单的测试例程也会产生相同的结果。
Private Sub Button2_Released()
errorPosition = "ThisDisplay.Button1 Test"
On Error GoTo errorTrap
Err.Clear
Button2.Enabled = True
Set conn = New ADODB.Connection
Set cmd = New ADODB.Command
constr = "Provider=sqloledb;data source=i.p.add.ress;initial catalog=CATALOG;user id=user;password=pass"
conn.Open constr
With cmd
.ActiveConnection = conn
.CommandType = adCmdStoredProc
.CommandText = "rt_sp_aof_loStart"
.CommandTimeout = 2
End With
Set rst(1) = cmd.Execute()
Do While Not rst(1).EOF
MsgBox (rst(1)(0))
rst(1).MoveNext
Loop
GoTo cleanExit
cleanExit:
On Error Resume Next
For i = 1 To 8
If Not rst(i) Is Nothing Then
rst(i).Close
End If
Next
conn.Close
Exit Sub
errorTrap:
LogDiagnosticsMessage "_Eventwatcher2.gfx, Position: " & errorPosition & " , Error Code: [ " & Hex(Err.Number) & "], Description: " & Err.Description & ""
Resume cleanExit
End Sub
【问题讨论】:
-
实际错误是什么?
-
另外,为什么你的存储过程硬编码了数据库和模式名称?如果您曾经重命名数据库,或将其部署到另一台服务器(使用不同的数据库名称),它将中断。
-
如果您从存储过程中返回单个值,请考虑使用输出参数而不是
SELECT。 -
@DougCoats 这是一个专有的 VBA,所以我不会发疯并发布整个过程,但这是非常标准的,我以前没有遇到过这个问题。
DIM recordSet as ADODB.RecordSet cmd.CommandType = adCmdStoredProc cmd.CommandText = "rt_sp_aof_loStart" set RecordSet = cmd.execute. -
您是否尝试在存储过程中添加
set nocount on作为第一条语句。
标签: sql sql-server vba sql-server-2008