我有一个SQL表称为UsersInAuthentication像列进行自定义格式
-----------------------
| AuthUserId | UserId |
| 1 | 4 |
| 1 | 5 |
| 1 | 8 |
-----------------------
我希望得到格式的所有用户“(4,5,8)”作为字符串使用单个存储过程和 如果可能的话,我也希望用这种格式插入,更新,删除操作。
编辑: 我使用SQL Server 2005
我有一个SQL表称为UsersInAuthentication像列进行自定义格式
-----------------------
| AuthUserId | UserId |
| 1 | 4 |
| 1 | 5 |
| 1 | 8 |
-----------------------
我希望得到格式的所有用户“(4,5,8)”作为字符串使用单个存储过程和 如果可能的话,我也希望用这种格式插入,更新,删除操作。
编辑: 我使用SQL Server 2005
由于您使用的SQL Server,你可以这样做:
declare @list nvarchar(max)
select @list = ''
select
@list = @list +
case when @list = '' then userid
else ',' + userid end
from
UsersInAuthentication
set @list = '(' + substring(@list, 1, 999) + ')'
print @list
这是一个极好的技巧,通过每一行的价值附加到变量的当前值建立变量。在桌子操作等方面非常方便。
为后人:
在MySQL中,你可以使用group_concat
:
select
concat('(' + group_concat(userid order by userid separator ',') + ')')
from
UserInAuthentication
在Oracle中,你可以使用光标:
cursor c_users is
select userid from usersinauthentication;
out_users varchar2(4000);
begin
for r_user in c_users loop
if out_users is null then
out_users:= r_user.first_Name;
else
out_users:= out_users ||', '|| r_user.first_Name;
end if;
end loop;
return out_users;
SELECT CONCAT('(', GROUP_CONCAT(UserId SEPARATOR ','), ')')
FROM UsersInAuthentication;
这只适用于MySQL。 – Eric 2009-08-31 11:19:49
实际查询确实取决于您的DBMS。假设Mysql:
SELECT GROUP_CONCAT(UserId) FROM UsersInAuthentication;
UPDATE UsersInAuthentication SET ... WHERE UserId IN (4,5,8);
DELETE FROM UsersInAuthentication WHERE UserId IN (4,5,8);
INSERT INTO UsersInAuthentication(UserId) VALUES (4), (5), (8);
但请注意,在数据库中使用逗号分隔的值在某种程度上忽略了重点。
假设的SQLServer:
--//testdata
WITH UsersInAuthentication (AuthUserId, UserId) AS (
SELECT 1, 4
UNION ALL SELECT 1, 5
UNION ALL SELECT 1, 8
)
--// real query
SELECT AuthUserId,
( SELECT cast(UserId as varchar) + ','
FROM UsersInAuthentication
ORDER BY UserID
FOR XML PATH('')
) AS UserIds
FROM UsersInAuthentication
GROUP BY AuthUserId
获得:
AuthUserId UserIds
----------- --------
1 4,5,8,
您正在使用哪种RDBMS? – Eric 2009-08-31 11:20:22
我正在使用MSSQL服务器 – Myra 2009-08-31 11:37:32
你如何设想更新工作? – pjp 2009-08-31 11:49:04