使用sp_exec_remote将参数传递给远程SPROC调用时遇到问题。这种语法有什么问题?
EXEC sp_execute_remote N'DevelopmentDBQueryDataSrc', N'pSelect_tReport', N'@StartDate datetime', @StartDate, N'@EndDate datetime', @EndDate
根据MS文件:
sp_execute_remote [ @data_source_name = ] datasourcename [ , @stmt = ] statement [ { , [ @params = ] N'@parameter_name data_type [,...n ]' } { , [ @param1 = ] 'value1' [ ,...n ] }]
我一直收到这个错误:
Error retrieving data from shard [DataSource[mydatasource-hidden].database.windows.net Database=Development]. The underlying error message received was: 'Procedure or function has too many arguments specified.'.
以下是SPROC声明:
CREATE PROCEDURE [dbo].[pSelect_tReport] (@StartDate datetime,@EndDate datetime) AS ...
附加信息: 这是在Azure上使用弹性查询。已创建,设置和测试权限和主密钥。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = <user>,
SECRET = <password>;
CREATE EXTERNAL DATA SOURCE DBQueryDataSrc WITH
(TYPE = RDBMS,
LOCATION = 'myserver.database.windows.net',
DATABASE_NAME = 'MyDatabaseName',
CREDENTIAL = ElasticDBQueryCred,
) ;
我在这里缺少什么?
答案 0 :(得分:1)
行。我想到了。它与语法有关。需要在第一个nvarchar字符串中的SPROC名称后面再次列出参数:
EXEC sp_execute_remote N'DevelopmentDBQueryDataSrc',
N'pSelect_tReport @StartDate, @EndDate',
N'@StartDate datetime, @EndDate datetime',
@StartDate=@StartDate, @EndDate=@EndDate;
这会奏效。它花了一些试验和错误,但我终于得到了它。谢谢你帮助我得出这个结论。我希望将来可以帮助其他人。
答案 1 :(得分:0)
我没有使用sp_execute_remote
,但我猜它遵循与sp_executesql
相同的约定:
EXEC sp_execute_remote N'DevelopmentDBQueryDataSrc',
N'pSelect_tReport',
N'@StartDate datetime, @EndDate datetime',
@StartDate=@StartDate, @EndDate=@EndDate;
也就是说,一个参数是一个包含所有参数定义的字符串。然后参数作为单独的参数。