2012-10-15 22 views
1

我有这个存储过程,我想知道如果“如果存在”实际上会比较select语句返回的值,或者它只会检查是否可以执行该条件,对不起,这样的愚蠢的问题,但我是新来的SQL,如果和如果存在的区别

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

declare @g 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_variable = 0 

我的select语句

select G_L_Column from G_L_table Where M_ID_Column = @M_ID_variable 

将返回true或false,所以只是想确保,如果“是否存在”会工作,“如果”

+0

如果您在其中的选择查询返回至少1条记录,则等于'if((select select query).records.count> 0),将执行'if exists'中的块。 –

+0

如何使用if语句因为它给了我错误,我问了一个问题,他们问我使用“存在”http://stackoverflow.com/questions/12892194/getting-error-for-if-else-in-a-stored-procedure – Change

+0

@伊格纳西奥 - 看到你删除了另一个问题。只是为了它的价值,我没有投票反对你的问题。 – SchmitzIT

回答

4

使用if exists不起作用if。它不检查返回值是真还是假,它检查是否存在一个值。

如果您的查询始终返回一个值,则if exists将始终评估为true。

+0

这意味着我的代码不会真的工作:S – Change

+0

@Ignacio:如果select返回一个位,可以你是不是简单地把它分配给变量? – Guffa

+0

我其实可以,但现在我只是用一个解决问题的值来检查它,ta – Change

2

EXISTS (Transact-SQL)

指定的子查询,以测试行的存在。

如果子查询包含任何行,则返回TRUE。