EXEC根据不同的条件进行不同的查询

时间:2013-09-09 23:20:40

标签: sql sql-server tsql

根据我需要运行单独查询的每个条件,我有3个条件。像这样:

Declare @p1 varchar, @p2 varchar, @p3 varchar, @q1 varchar, @q2 varchar , @q3 varchar


set @p1 = 'type'
set @p2 = ( select top 1 from myTable where column = '8')
set @p3 = '1234'

set @q1 = ' select * from foo ' 
set @q2 = ' select * from foobar '
set @q3 = ' select * from reallyfoobarred ' 


if @p1 = @p2  // if this is true execute query 1 
begin
EXEC (@q1)
end 
if @p1 = 'fish' // if this is true execute query 2 
begin 
exec (@q2)
end 
if @p1 = 'cats' // if this is true execute query 3 
begin 
EXEC (@q3) 
end 

问题是必须为每个查询重新声明和设置变量。有没有办法只用一次声明变量来做到这一点?我现在在哪里考虑3个独立的存储过程。如果我不需要,我不想那样做。

2 个答案:

答案 0 :(得分:1)

您没有声明varchar的大小,并且您的值会被截断。

声明您的变量,如

Declare @p1 varchar(100), @p2 varchar(100), @p3 varchar(100), 
        @q1 varchar(100), @q2 varchar(100), @q3 varchar(100)

参见demo here - 我修改了它并注释掉了你的表名。这应该给你的想法。

Declare @p1 varchar(100), @p2 varchar(100), @p3 varchar(100), 
        @q1 varchar(100), @q2 varchar(100), @q3 varchar(100)


set @p1 = 'type'
set @p2 = ( select top 1 'type' ) --from myTable where column = '8')
set @p3 = '1234'

set @q1 = ' select ''foo query''' --* from foo ' 
set @q2 = ' select ''foobar query''' --* from foobar '
set @q3 = ' select ''reallyfoobarred query''' --* from reallyfoobarred ' 


if @p1 = @p2  --// if this is true execute query 1 
begin
EXEC (@q1)
end 
if @p1 = 'fish' --// if this is true execute query 2 
begin 
exec (@q2)
end 
if @p1 = 'cats' --// if this is true execute query 3 
begin 
EXEC (@q3) 
end 

这将打印foo query

答案 1 :(得分:1)

这就是我所做的:

declare @par varchar(10)

set @par = ( select top 1 variety from myTable)

if @par = 'CATS'
select all_cats from myOtherTable
else if 
@par in ('Birds','Fish')
select not_dogs from myOtherTable .........

等等。谢谢大家的帮助。我昨晚回到家的时候想过这样做。