将SET变量传递给存储过程

时间:2017-02-16 09:50:57

标签: sql-server tsql

我认为这很简单,但我对SP的经验非常有限。

我有一个相当冗长的查询,我现在正试图传递给SP,我没有太多的运气所以我把它分解成各个部分而且我被困在以下部分:

ALTER PROCEDURE [dbo].[Exchange Rate] (@CCY char (3))

EXEC('

DECLARE @CurConv float

SET @CurConv = (Select XRATE FROM CURRENCY.dbo.currfx where CODE = ' + @CCY + ')

') END

我不断得到的错误是:

Msg 207, Level 16, State 1, Line 5
Invalid column name 'GBP'.

问题是英镑不是一个列的值吗?任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:4)

正在执行的动态查询是

SET @CurConv = (Select XRATE FROM CURRENCY.dbo.currfx where CODE = GBP

但是应该是

SET @CurConv = (Select XRATE FROM CURRENCY.dbo.currfx where CODE = 'GBP'

因此,您必须使用其他单引号将@CCY的值包围起来:

EXEC('

DECLARE @CurConv float

SET @CurConv = (Select XRATE FROM CURRENCY.dbo.currfx where CODE = ''' + @CCY + ''')

') END

答案 1 :(得分:0)

DECLARE @CurConv float 选择@CurConv = XRATE FROM CURRENCY.dbo.currfx,其中CODE = @CCY

EXEC Exchange @CurConv