创建自动生成密码的存储过程,我想在表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
答案 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))