You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询sys表时MS Access与SSMS执行存储过程返回结果不一致问题

MS Access调用SQL Server存储过程时输出参数结果与SSMS不一致问题

问题现象

  • 当向临时表#views插入虚拟数据'BLAH'时,SSMS与Access返回结果一致:

    SSMS result: @Status = 'ERROR'
    MS Access result: @Status = 'ERROR'

  • 当向#views插入来自sys.objects和sys.sql_modules的真实数据时,结果出现差异:

    SSMS result: @Status = 'ERROR'
    MS Access result: @Status = 'OK'

存储过程代码

ALTER PROCEDURE dbo.TestSP 
    @Status nvarchar(255) OUTPUT
AS
BEGIN
    IF OBJECT_ID('tempdb..#views') IS NOT NULL
       DROP TABLE #views

    IF OBJECT_ID('tempdb..#GSSTables') IS NOT NULL
       DROP TABLE #GSSTables

    CREATE TABLE #views (objectName nvarchar(100))
    CREATE TABLE #GSSTables (objectName nvarchar(100))

    SET @Status = 'OK'

    INSERT INTO #views (objectName)
        SELECT -- 此分支会导致Access中@Status返回'OK'
            a.name
        FROM
            sys.objects a WITH (NOLOCK)
        INNER JOIN
            sys.sql_modules b WITH (NOLOCK) ON a.object_id = b.object_id
        WHERE
            a.type = 'V'
            AND b.definition LIKE '%OPENQUERY(GSS%,%'

        -- select -- 此分支会导致Access中@Status返回'ERROR'
        --  'BLAH' 
    
    IF EXISTS (SELECT * 
               FROM #views v 
               LEFT JOIN #GSSTables g ON v.objectName = g.objectName 
               WHERE g.objectName IS NULL)
    BEGIN
        SET @Status = 'ERROR'
        RETURN
    END

    IF OBJECT_ID('tempdb..#views') IS NOT NULL
       DROP TABLE #views

    IF OBJECT_ID('tempdb..#GSSTables') IS NOT NULL
       DROP TABLE #GSSTables
END

Access触发存储过程的VB代码

Dim con As ADODB.Connection, cmd As New ADODB.Command, prm As New ADODB.Parameter
Dim Status As String

If Not EstablishConnection(con) Then
   ErrHandler glbLastErrNum, glbLastError
   GoTo ExitLabel
End If

Set cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "TestSP"

Set prm = cmd.CreateParameter("@Status", adVarChar, adParamOutput, 255)
cmd.Parameters.Append prm

cmd.Execute

Status = cmd.Parameters("@Status")
MsgBox Status

内容的提问来源于stack exchange,提问作者TheMortiestMorty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:57:24