我想在列中插入值,该值是由存储过程创建的,我该怎么做

时间:2018-04-25 09:57:03

标签: sql-server

创建自动生成密码的存储过程,我想在表studentlogin的密码列中添加此值

create table studentlogin(id int primary key identity(1,1),name varchar(20),username varchar(20),password varchar(20));


create procedure [dbo].[spgenratepassword]
as
begin
    select char(ascii('a')+(Abs(Checksum(NewId()))%25)) +
    cast((Abs(Checksum(NewId()))%10) as varchar(1))+
    char(ascii('A')+(Abs(Checksum(NewId()))%25)) +
    right(newid(),5) Random_Number
end

2 个答案:

答案 0 :(得分:0)

使用用户定义的函数(您必须将NewId()作为参数传递,因为UDF中不允许使用非确定性函数):

CREATE FUNCTION dbo.fnCreatePassword (@NewId0 as varchar(36), @NewId1 as varchar(36), @NewId2 as varchar(36), @NewId3 as varchar(36))
RETURNS VARCHAR(20) AS  
BEGIN 

    RETURN char(ascii('a')+(Abs(Checksum(@NewId0))%25)) +
        cast((Abs(Checksum(@NewId1))%10) as varchar(1))+
        char(ascii('A')+(Abs(Checksum(@NewId2))%25)) +
        right(@NewId3,5)
END

GO

然后插入:

INSERT studentlogin (name, username, password)
VALUES ('Test', 'TestUser', dbo.fnCreatePassword(NewId(), NewId(), NewId(), NewId()))

答案 1 :(得分:0)

我建议您将此存储过程转换为函数,以便可以直接在select语句中使用

如果您坚持使用存储过程,那么您应该尝试捕获exec语句的结果。

=

是捕获数据的有效语法。

因此,您可以将结果存储在临时表中并从中检索。

请参阅下面的查询

MATCH(1,{0;1;0;0},0))