我对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”实际上并不是我想要的,抱歉。
答案 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