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 '+'.我不知道为什么会这样。请为此提供解决方案。我也为此搜索了一下,但找不到合适的解决方案。
谢谢
您必须使整个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)