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

Is this a bug: stored procedure runs fine without parameters, causes error when parameters are added?

我在 MySQL 数据库中创建了一个存储过程。使用 Microsoft SQL Server Management Studio 通过 Microsoft SQL Server 2012 作为链接服务器访问此数据库。创建链接服务器时选择的提供商是 "Microsoft OLE DB Provider for ODBC Drivers".

当我 运行 从 Report builder 3.0 作为文本关注时,它 运行 可以正常获取数据。

EXEC('CALL storedProcedureName(''string1'', ''string2'', ''string3'')') AT LinkedServerName;

但是当我尝试用参数名称 parameter1、parameter2、parameter3 替换 string1、string2、string3 时:

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

我收到错误:

Could not execute statement on remote server 'LinkedServerName'.
(Microsoft SQL Server, Error: 7215)

当我尝试时:

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

我收到输入参数 1、参数 2、参数 3 值的提示。但是当我输入值并单击确定时,出现错误:

Incorrect syntax near '@parameter1'. (Microsoft SQL Server, Error: 102)

问题:我是不是在语法上遗漏了什么或者这是一个错误?

链接服务器有:

"RPC" 和 "RPC out" 设置为 True。

OLEDB 提供者有:

  1. 启用允许进程中
  2. 启用动态参数

我相信你必须像下面这样称呼它。所以params变成了用单引号包裹的字符串:

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

我知道这是一个较旧的问题,但已接受的答案对 SQL 注入开放,我认为提供更安全的方法很重要。

您确实想使用参数化查询

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

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