Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 调用另一个存储过程的存储过程按部分名称筛选列,然后比较第二个SP';带列金额的返回编号_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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