【发布时间】:2011-11-10 07:34:21
【问题描述】:
我创建触发器
CREATE TRIGGER PartnersTrigger on Partners
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
Declare @Key nvarchar(10);
EXEC @Key = sp_GeneratePassword 5;
UPDATE Partners SET KeyInvitation = @Key WHERE Id IN (SELECT Id FROM inserted);
INSERT INTO Partners(Email,KeyInvitation)
SELECT Email, KeyInvitation
FROM inserted
END
GO
但我需要设置为KeyInvitation 变量@Key。
并在@Key中设置sp_GeneratePassword 5(过程)。
如何做到这一点?
更新
CREATE PROCEDURE sp_GeneratePassword
(
@Length int
)
AS
DECLARE @RandomID varchar(32)
DECLARE @counter smallint
DECLARE @RandomNumber float
DECLARE @RandomNumberInt tinyint
DECLARE @CurrentCharacter varchar(1)
DECLARE @ValidCharacters varchar(255)
SET @ValidCharacters = 'abcdefghijklmnopqrstuvwxyz0123456789'
DECLARE @ValidCharactersLength int
SET @ValidCharactersLength = len(@ValidCharacters)
SET @CurrentCharacter = ''
SET @RandomNumber = 0
SET @RandomNumberInt = 0
SET @RandomID = ''
SET NOCOUNT ON
SET @counter = 1
WHILE @counter < (@Length + 1)
BEGIN
SET @RandomNumber = Rand()
SET @RandomNumberInt = Convert(tinyint, ((@ValidCharactersLength - 1) * @RandomNumber + 1))
SELECT @CurrentCharacter = SUBSTRING(@ValidCharacters, @RandomNumberInt, 1)
SET @counter = @counter + 1
SET @RandomID = @RandomID + @CurrentCharacter
END
SELECT @RandomID AS 'Password'
GO
这不起作用:
Declare @Key nvar char(10); -- can't post when I use "nvarchar" here
EXEC @Key = sp_GeneratePassword 5;
错误:
'char' 附近的语法不正确。必须声明标量变量“@Key”。 必须声明标量变量“@Key”。必须声明标量 变量“@Key”。
【问题讨论】:
-
有错误
Declare @Key nvar char(10);应该是Declare @Key nvarchar(10);(没有空格)但无论如何它都不会工作。检查我的答案,但请记住,一次插入所有记录时,它会为所有记录设置相同的密码。
标签: sql sql-server stored-procedures triggers