0

I want to make this SQL query into a stored procedure. I have this code I want to use to fetch values for currency. It does not work as expected.

The code looks something like this :

CREATE PROCEDURE ShowVaultBalances
    @SOL_ID varchar(50) = NULL,
    @acct_crncy_code varchar(50) = NULL
AS 
BEGIN
    SET NOCOUNT ON;

    SELECT *
    FROM OPENQUERY(LinkedServer_Name,
                   'select foracid, acct_name, acct_crncy_code, clr_bal_amt from table_name where bacid = ''1010000001'' and acct_crncy_code = ' + @acct_crncy_code + ' and sol_id = ' + @SOL_ID + '')
END

And get this error :

Msg 102, Level 15, State 1, Procedure ShowVaultBalances, Line 8
Incorrect syntax near '+'.

Did I miss something?

Husseiny
  • 45
  • 1
  • 5

1 Answers1

1

OPENQUERY doesn't support string concatenation. You have to use Dynamic SQL for the full statement.

Try something like this:

CREATE PROCEDURE ShowVaultBalances
    @SOL_ID varchar(50) = NULL,
    @acct_crncy_code varchar(50) = NULL
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @SQL NVARCHAR(MAX) = N'
    SELECT *
    FROM OPENQUERY(LinkedServer_Name,
                   ''select foracid
                   , acct_name
                   , acct_crncy_code
                   , clr_bal_amt 
                   from table_name 
                   where bacid = ''''1010000001'''' 
                   and acct_crncy_code = ''''' + QUOTENAME(@acct_crncy_code,'''') + ''''' 
                   and sol_id = ''''' + QUOTENAME(@SOL_ID,'''') + ''''''')'
    
    EXEC (@SQL)
END
Preben Huybrechts
  • 5,853
  • 2
  • 27
  • 63