2017-02-16 81 views
0

我认为这很简单,但是我对SP的使用经验非常有限。将SET变量传递给存储过程

我有一个相当长的查询,我现在想要传入一个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'. 

问题是英镑是不是列的值?任何帮助将非常感激。

感谢

+0

什么是数据库类型? – patrick

+0

你为什么使用动态sql? –

+0

因为我将结果传递给Excel – Carlos80

回答

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 
+0

感谢Andy,正是我所需要的。 – Carlos80

0

DECLARE @CurConv浮 选择@CurConv = XRATE FROM CURRENCY.dbo.currfx其代码= @CCY

EXEC交易所@CurConv

+0

你可以试试这个.. –