在OPENROWSET SQL Server中使用参数

Man*_*noj 1 t-sql sql-server openrowset

我正在创建一个存储过程,在其中调用另一个存储过程(该过程返回了很多列,并且我只需要一个列值,所以我无法创建临时表来存储值)OPENROWSET

当我用下面的话就可以了

declare @AgencyID int=15,@PatientID int=3701
SELECT a.PrimaryInsuredName 
    FROM OPENROWSET('SQLNCLI',  
    'Server=ServerName;Database=DbName;Trusted_Connection=yes',
    'exec USP_Billing_GetPatientWithInsurence 3701,15') AS a;
Run Code Online (Sandbox Code Playgroud)

一切正常。但是我想传递参数进行调用, USP_Billing_GetPatientWithInsurence因为值将是动态的。所以我用下面的代码

 declare @AgencyID int=15,@PatientID int=3701
    SELECT a.PrimaryInsuredName 
        FROM OPENROWSET('SQLNCLI',  
        'Server=ServerName;Database=DbName;Trusted_Connection=yes',
        'exec USP_Billing_GetPatientWithInsurence '+ @PatientID +','+ @AgencyID+'') AS a;
Run Code Online (Sandbox Code Playgroud)

但它不起作用当我运行此查询时发生错误, Incorrect syntax near '+'.我不知道为什么会这样。请为此提供解决方案。我也为此搜索了一下,但找不到合适的解决方案。

谢谢

Tab*_*man 5

您必须使整个SELECT字符串动态化:

 declare @AgencyID int=15,@PatientID int=3701
DECLARE @SQLStr varchar(max)='
    SELECT a.PrimaryInsuredName 
        FROM OPENROWSET(''SQLNCLI'',  
        ''Server=ServerName;Database=DbName;Trusted_Connection=yes'',
        ''exec USP_Billing_GetPatientWithInsurence '+ CAST(@PatientID AS varchar(15)) +','+ CAST(@AgencyID AS varchar(15)) +''') AS a';
EXECUTE(@SQLStr);
Run Code Online (Sandbox Code Playgroud)