Stored procedures 这是一个错误:存储过程在没有参数的情况下运行正常,在添加参数时会导致错误?

Stored procedures 这是一个错误:存储过程在没有参数的情况下运行正常,在添加参数时会导致错误?,stored-procedures,sql-server-2012,ssrs-2012,reportbuilder3.0,Stored Procedures,Sql Server 2012,Ssrs 2012,Reportbuilder3.0,我在MySQL数据库中创建了一个存储过程。使用Microsoft SQL server Management Studio,通过Microsoft SQL server 2012作为链接服务器访问此数据库。创建链接服务器时选择的提供程序是“用于ODBC驱动程序的Microsoft OLE DB提供程序” 当我从ReportBuilder3.0中以文本形式运行以下命令时,它运行良好并获取数据 EXEC('CALL storedProcedureName(''string1'', ''string2

我在MySQL数据库中创建了一个存储过程。使用Microsoft SQL server Management Studio,通过Microsoft SQL server 2012作为链接服务器访问此数据库。创建链接服务器时选择的提供程序是“用于ODBC驱动程序的Microsoft OLE DB提供程序”

当我从ReportBuilder3.0中以文本形式运行以下命令时,它运行良好并获取数据

EXEC('CALL storedProcedureName(''string1'', ''string2'', ''string3'')') AT LinkedServerName;
但是,当我尝试用参数名称parameter1、parameter2、parameter3替换string1、string2、string3时:

EXEC('CALL storedProcedureName(@parameter1, @parameter2, @parameter3)') AT LinkedServerName;
我得到一个错误:

无法在远程服务器“LinkedServerName”上执行语句。
(Microsoft SQL Server,错误:7215)

当我尝试时:

EXEC('CALL storedProcedureName('@parameter1', '@parameter2', '@parameter3')') AT LinkedServerName;
我得到提示输入参数1、参数2、参数3的值。但当我输入值并单击“确定”时,我得到错误:

“@parameter1”附近的语法不正确。(Microsoft SQL Server,错误:102)

问题:我是在语法上遗漏了什么,还是这是一个bug

链接服务器具有:

“RPC”和“RPC out”设置为True

OLEDB提供程序具有:

  • 已启用允许进程内
  • 启用的动态参数

  • 我相信你必须这样称呼它。所以参数变成了用单引号括起来的字符串:

    EXEC('CALL storedProcedureName('''+@parameter1+''', '''+@parameter2+''', '''+@parameter3+''')') AT LinkedServerName;
    

    我相信你必须这样称呼它。所以参数变成了用单引号括起来的字符串:

    EXEC('CALL storedProcedureName('''+@parameter1+''', '''+@parameter2+''', '''+@parameter3+''')') AT LinkedServerName;
    

    我知道这是一个较老的问题,但公认的答案是开放的SQL注入,我认为重要的是提供一个更安全的方法

    您确实想要使用参数化查询

    EXEC('CALL storedProcedureName(?,?,?)',@parameter1, @parameter2, @parameter3) AT LinkedServerName;
    

    我知道这适用于oracle,也适用于MySql。

    我知道这是一个老问题,但公认的答案是SQL注入,我认为提供更安全的方法很重要

    您确实想要使用参数化查询

    EXEC('CALL storedProcedureName(?,?,?)',@parameter1, @parameter2, @parameter3) AT LinkedServerName;
    
    我知道这适用于oracle,也适用于MySql