Sql 调用另一个存储过程的存储过程按部分名称筛选列,然后比较第二个SP';带列金额的返回编号
目标是获取用户拥有的密码数量,并将其与公司的规则进行比较。如果超过了他们允许的数量,我们将插入新的(带日期)并删除最后一个(或者删除最后一个,然后插入新的。老实说,我已经知道我想走哪条路了) 我有两个存储过程:Sql 调用另一个存储过程的存储过程按部分名称筛选列,然后比较第二个SP';带列金额的返回编号,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,目标是获取用户拥有的密码数量,并将其与公司的规则进行比较。如果超过了他们允许的数量,我们将插入新的(带日期)并删除最后一个(或者删除最后一个,然后插入新的。老实说,我已经知道我想走哪条路了) 我有两个存储过程:删除最旧的密码和日期和密码数 删除最旧的密码和日期呼叫密码数,因为我需要该金额 我非常确定我的存储过程的开头是好的。这是第二部分,从@Temp\u Password\u Table开始 CREATE Procedure Delete_Oldest_Password_And_Date
删除最旧的密码和日期
和密码数
删除最旧的密码和日期
呼叫密码数
,因为我需要该金额
我非常确定我的存储过程的开头是好的。这是第二部分,从@Temp\u Password\u 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
我现在还不担心删除。我更担心的是先得到正确的信息
请记住,每个人的用户密码都是动态的。这个计划(我还没有谈到这一部分)是让最新的进入一个名为“up_Password1”的列,然后是第二个最新的进入“up_Password2”列,等等。这里有一个程序,它将检查用户拥有的密码数量,并删除最旧的密码,直到出现最多的密码-1,因此,设置要插入的新密码,该密码仍然遵循历史密码数的策略。proc采用下表:
CREATE TABLE dbo.User_Passwords(
ua_fk UNIQUEIDENTIFIER,
password_hash NVARCHAR(100),
start_date DATETIME,
end_date DATETIME)
密码\u散列可以是您决定将密码列存储为的任何内容(只是请不要在此处以纯文本形式存储实际密码)
对不起!更正!是否只有一个值从\u个\u密码返回?如果每次都是一个INT值,我就把它放在一个INT变量中,而不是一个表变量中。然后,您可以将其与IF/ELSE块一起使用,再次使用时更干净!是的,一个值,一个来自一个字段(单元格)的INT,我也试过这样做,但我很可能做得不正确。这是一个抛出错误SSO User_Password有一个可变的列数,这取决于用户和他们以前有多少个密码?只是为了澄清一下,如果一个用户有5个密码,那么使用此架构的User_Password中将有5个不同的记录。太好了。。。。。事实上我不想让你添加删除,因为我想慢慢地完成,但谢谢你!
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