我正在创建一个存储过程,我在其中调用另一个存储过程 存储过程(这个过程返回很多列,我想要 只有一个列值因此我无法创建临时表来存储值) 使用
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 '+'.
我不知道为什么会这样。请 为此提供解决方案。我也用谷歌搜索了但是找不到了 适当的解决方案。
由于
答案 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);