0

testTableifからすべてのレコード (6 行) を取得したいと思いますa = 44は SP のデフォルト パラメータです。

create table testTable(a int, b int, c int)
go
insert into testTable values(2, 101, 100000)
go
insert into testTable values(2, 101, 100001)
go
insert into testTable values(3, 101, 100002)
go
insert into testTable values(3, 102, 100003)
go
insert into testTable values(4, 1, 100004)
go
insert into testTable values(4, 1, 100005)
go

create proc SPtest
                @a int = 4,
                @b int = 1
as
select       * from testTable where a = @a and b = @b

exec SPtest 2, 101

上記はうまくいきます。しかし、私はこのようなものが必要です:

declare @a int
set @a = 4

select * 
from testTable 
where a = case @a when 4 then select distinct a from testTable end
4

2 に答える 2

0

Cookie をカットする方法はいくつかありますが、これが最も論理的に思えます。

IF @a = 4 THEN
BEGIN
  SELECT *
  FROM testTable
END
ELSE
BEGIN
  SELECT *
  FROM testTable
  WHERE a = @a and b = @b
END

or ステートメントを使用することもできます。

SELECT *
FROM testTable 
WHERE @a = 4 or (a = @a and b = @b)

頑張ってください(コメントしたはずですが、まだそこにいません)。

よろしく、

于 2013-05-15T14:04:11.403 に答える
0

これを試してください:

create proc SPtest
    @a int = 4,
    @b int = 1
as
if @a = 4
    select distinct a from testTable
else
    select * from testTable where a = @a and b = @b
go
exec SPtest
exec SPtest 3,101
于 2013-05-15T16:21:47.313 に答える