在OPENROWSET Sql Server中使用参数

时间:2015-05-27 10:32:11

标签: sql-server tsql 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;
  

工作正常。但我想传递参数进行调用   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;
  

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

由于

1 个答案:

答案 0 :(得分:4)

您必须使整个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);