目标是获取用户拥有的密码数量,并将其与公司规则进行比较。如果它超过了它们允许的数量,我们插入新的(带有日期)并删除最后一个(或删除最后一个然后插入新的。我老实说已经找到了我想去的方式)。< / p>
我有两个存储过程:Delete_Oldest_Password_And_Date
和Number_Of_Passwords
Delete_Oldest_Password_And_Date
来电Number_Of_Passwords
,因为我需要这笔金额。
我很确定我的存储过程的开头是好的。这是下半场,从@Temp_Password_Table
开始。
CREATE Procedure Delete_Oldest_Password_And_Date
@ua_pk uniqueidentifier
AS
DECLARE @Temp_Table table
(
numberOfPasswords INT
)
INSERT INTO @Temp_Table
EXEC Number_Of_Passwords @ua_pk
SELECT *
FROM
@Temp_Table
DECLARE @Temp_Password_Table table
(
password varchar(max)
)
SELECT *
FROM User_Passwords
WHERE User_Passwords.ua_fk = @ua_pk
AND up_Password LIKE '%Password%'
GO
GRANT EXEC ON Delete_Oldest_Password_And_Date TO WEB
GO
我还没有担心删除。我更担心的是首先获得正确的信息。
请记住,User_Passwords是每人动态的。计划(我尚未完成此部分)是让最新的列进入名为“up_Password1”的列,然后进入第二个最新的列“up_Password2”等。
答案 0 :(得分:1)
这里是一个将检查用户拥有的密码数量的proc,并将删除最旧的密码,直到有Max#ofPasswords-1,从而设置插入的新密码仍然是遵循历史密码数量的策略。 proc假设如下表:
CREATE TABLE dbo.User_Passwords(
ua_fk UNIQUEIDENTIFIER,
password_hash NVARCHAR(100),
start_date DATETIME,
end_date DATETIME)
Password_hash可以是您决定存储密码列的任何内容(请不要在此处以明文形式存储实际密码)。
CREATE Procedure Delete_Oldest_Password_And_Date
@ua_pk uniqueidentifier
AS
DECLARE @numberOfPasswords INT,
@MaxPasswordNum INT = 10
SELECT @numberOfPasswords = COUNT(*)
FROM User_Passwords
WHERE ua_fk = @ua_pk
IF @numberOfPasswords >= @MaxPasswordNum
BEGIN
WITH T
AS (SELECT TOP (@numberOfPasswords - (@MaxPasswordNum-1)) *
FROM User_Passwords
WHERE ua_fk = @ua_pk
ORDER BY end_date ASC)
DELETE FROM T;
END
GO