我有一個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