0

我有 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 个单独的存储过程。如果没有必要,我不想这样做。

4

2 回答 2

1

This is what I did:

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 .........

And so on. Thank you for your help everybody. I thought about doing it this way when I got home last night.

于 2013-09-10T16:07:33.940 回答
1

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

声明你的变量,如

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

在此处查看演示- 我已对其进行了修改并注释掉了您的表名。这应该给你的想法。

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

于 2013-09-10T05:26:06.357 回答