1

我想对临时表进行内部连接,但前提是另一个变量不为 NULL?例如,我有一个用户表,我传入一个字符串,其中用户 ID 用分号分隔。我将它读入一个临时表,并针对用户表进行内部连接,但前提是用户 ID 的字符串不为空。否则我想返回所有用户行。

存储过程有一个变量传入:

@UidList             varchar(max),

这是一串用户 ID,用分号分隔。这变成了一个临时表

DECLARE @List TABLE (UserUid uniqueidentifier NOT NULL)

然后另一个函数将传入的字符串转换为表

IF @UidList IS NOT NULL
INSERT INTO @List(UserUid)
SELECT ItemUid
FROM dbo.AFN_ConvertUidListToTable(@UidList)

然后我加入用户表

select * from users 
...
inner join @List on users.userid = @List.UserUid`

但是如果传入的字符串@UidList 为空,那么我想匹配用户表中的所有行。

4

4 回答 4

1
declare @tmp table (id int)

--insert into @tmp values (1)

Select * from a
where 
(
ID in (Select ID from @tmp)
or 
(Select Count(ID)  from @tmp)=0
)

http://sqlfiddle.com/#!3/a1a22/10

于 2013-02-19T20:14:16.077 回答
0

当然,这只是查看用户 ID 字符串和分支的情况吗?

IF @UserIds IS NULL
  select * from users
ELSE
  'stuff involving tempdb
于 2013-02-19T20:07:40.117 回答
0

如果@UidList IS NULL,左连接将从用户表中获取所有记录:

SELECT users.* 
FROM users
LEFT JOIN @List 
ON @List.UserUid = users.userid
WHERE @List.UserUid IS NOT NULL
OR @UidList IS NULL

但是如果@UidList 不为空,那么我们正在寻找匹配项。

于 2013-02-19T20:29:57.433 回答
0
DECLARE @UserCount INTEGER

SELECT @UserCount = COUNT(1) FROM #UserIDList

IF @UserCount > 0
BEGIN
  SELECT UserTable.* FROM UserTable JOIN #UserIDList ON UserTable.ID = #UserIDList.ID
END
ELSE
BEGIN
  SELECT UserTable.* FROM UserTable
END
于 2013-02-19T20:08:25.193 回答