在存储过程中获取if / else的错误

时间:2012-10-15 08:54:37

标签: sql sql-server-2008

我对SQL查询相对比较新,但我有这个存储过程,我试图获取声明变量的值,如下所述,但是收到错误,

第一行是20,

declare @m_ID_v int
set @m_ID_v = ( select ID_C from M_T where MName_C = @MName_parameter)

declare @g bit
if (select G_L_Column from G_L_table Where M_ID_Column = @M_ID_variable)
    set @g_v = 1
else
    set @g_variable = 0

我得到例外:

  

Msg 4145,Level 15,State 1,Procedure GetID,Line 20
  在上下文中指定的非布尔类型的表达式   条件是预期的,接近'set'。 Msg 156,Level 15,State 1,   过程GetID,第21行关键字'else'附近的语法不正确。

现在,如果我删除declare @g...并尝试解析它,则不会发生错误

修改

我希望我的代码通过我的select语句来检查返回的值,所以“if exists”实际上并不是我想要的,抱歉。

3 个答案:

答案 0 :(得分:2)

尝试使用exists

declare @g_v bit
if exists(select G_L_Column from G_L_table Where M_ID_Column = @M_ID_variable)
   set @g_v = 1
else
   set @g_v = 0

答案 1 :(得分:1)

你不能说

 if (select ...

您必须在if语句中将某些内容与其他内容进行比较,或使用布尔函数,例如exists

答案 2 :(得分:1)

declare @m_ID_v int
set @m_ID_v = ( select ID_C from M_T where MName_C = @MName_parameter)

declare @g bit
if ((select G_L_Column from G_L_table Where M_ID_Column = @M_ID_variable) = value )
    set @g_v = 1
else
    set @g_variable = 0