根据我需要运行单独查询的每个条件,我有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个独立的存储过程。如果我不需要,我不想那样做。
答案 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 .........
等等。谢谢大家的帮助。我昨晚回到家的时候想过这样做。