无法使用单个存储过程列出所有项目和选定项目
Unable to use a single Stored Procedure for Listing all items and Selected Items
我需要使用 sql 将州名列为清单。也就是说,如果用户第一次登陆该页面,他应该看到所有状态,当他进入编辑模式时,他应该看到所有状态,并且必须检查选定状态。如何使用单个存储过程实现此目的。我试过了
create proc spGetList
AS
Begin
SELECT DISTINCT A.*
FROM State A
LEFT JOIN UserPreferedState B ON A.StateId = B.StateId
WHERE UserId = 3
End
但问题是我不确定如何在存储过程中添加一个新列(比如 IsSelected
)并将值设置为 1(如果选择了该状态,将值设置为 0 是该状态)未选中。
示例:
Table: UserPreferedState
Id UserId StateId
-------------------
1 1 1
2 1 2
3 2 1
4 2 2
5 3 1
Table: State
Id StateName
--------------
1 ABC
2 DEF
3 GHI
我希望 userid = 3
时的结果是:
Id StateName IsSelected
--------------------------
1 ABC 1
2 DEF 0
3 GHI 0
我希望 userid = 1
时的结果是:
Id StateName IsSelected
-------------------------
1 ABC 1
2 DEF 1
3 GHI 0
尽情享受吧。这也是 fiddle :http://sqlfiddle.com/#!3/217ce/2
CREATE TABLE state (
StateId INT,
StateName VARCHAR(100)
);
CREATE TABLE userPreferredState (
Id INT,
UserId INT,
StateId INT
);
INSERT INTO state (StateId, StateName)
VALUES (1, 'ABC'), (2, 'DEF'), (3, 'GHI');
INSERT INTO userPreferredState (Id, UserId, StateId)
VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1), (4, 2, 2), (5, 3, 1);
CREATE PROCEDURE getStateListForUser @User int
AS
SELECT
s.StateId AS Id,
s.stateName,
CASE WHEN (ups.UserId = @User) THEN '1' ELSE '0' END AS IsSelected
FROM
State s
LEFT JOIN
UserPreferredState ups ON s.StateId = ups.StateId AND ups.UserId = @User
GO
要运行它,调用:
EXEC getStateListForUser @User = 1
EXEC getStateListForUser @User = 3
我需要使用 sql 将州名列为清单。也就是说,如果用户第一次登陆该页面,他应该看到所有状态,当他进入编辑模式时,他应该看到所有状态,并且必须检查选定状态。如何使用单个存储过程实现此目的。我试过了
create proc spGetList
AS
Begin
SELECT DISTINCT A.*
FROM State A
LEFT JOIN UserPreferedState B ON A.StateId = B.StateId
WHERE UserId = 3
End
但问题是我不确定如何在存储过程中添加一个新列(比如 IsSelected
)并将值设置为 1(如果选择了该状态,将值设置为 0 是该状态)未选中。
示例:
Table: UserPreferedState
Id UserId StateId
-------------------
1 1 1
2 1 2
3 2 1
4 2 2
5 3 1
Table: State
Id StateName
--------------
1 ABC
2 DEF
3 GHI
我希望 userid = 3
时的结果是:
Id StateName IsSelected
--------------------------
1 ABC 1
2 DEF 0
3 GHI 0
我希望 userid = 1
时的结果是:
Id StateName IsSelected
-------------------------
1 ABC 1
2 DEF 1
3 GHI 0
尽情享受吧。这也是 fiddle :http://sqlfiddle.com/#!3/217ce/2
CREATE TABLE state (
StateId INT,
StateName VARCHAR(100)
);
CREATE TABLE userPreferredState (
Id INT,
UserId INT,
StateId INT
);
INSERT INTO state (StateId, StateName)
VALUES (1, 'ABC'), (2, 'DEF'), (3, 'GHI');
INSERT INTO userPreferredState (Id, UserId, StateId)
VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1), (4, 2, 2), (5, 3, 1);
CREATE PROCEDURE getStateListForUser @User int
AS
SELECT
s.StateId AS Id,
s.stateName,
CASE WHEN (ups.UserId = @User) THEN '1' ELSE '0' END AS IsSelected
FROM
State s
LEFT JOIN
UserPreferredState ups ON s.StateId = ups.StateId AND ups.UserId = @User
GO
要运行它,调用:
EXEC getStateListForUser @User = 1
EXEC getStateListForUser @User = 3