临时表上的内连接,除非它是空的

时间:2013-02-19 19:59:17

标签: sql sql-server tsql

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

存储过程传入​​了一个变量:

@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为null,那么我想匹配users表中的所有行。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当然这只是查看userids字符串和分支的一种情况吗?

IF @UserIds IS NULL
  select * from users
ELSE
  'stuff involving tempdb

答案 2 :(得分: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

答案 3 :(得分:0)

如果@UidList IS NULL:

,左连接将从users表中获取所有记录
SELECT users.* 
FROM users
LEFT JOIN @List 
ON @List.UserUid = users.userid
WHERE @List.UserUid IS NOT NULL
OR @UidList IS NULL

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