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