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

のサイズを宣言していないため、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 に答える
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 .........

等々。お世話になりました。昨夜帰宅したとき、私はこのようにしようと思いました。

于 2013-09-10T16:07:33.940 に答える