因此,此操作的目的是为了显示安全性,因此此操作是在访客用户帐户下进行的。我授予来宾用户执行此代码的权限。但是我一直收到NUll错误
不能将NULL值插入column,table;列不 允许为空。 INSERT失败。该语句已终止。的 “ vc_AddUserLogin”过程尝试返回NULL状态, 这是不允许的。而是返回状态0。
所以我已经尝试EXEC vc_AddUserLogin 'The Doctor', 'Gallifrey'
这是该过程的代码
CREATE PROCEDURE vc_AddUserLogin(@userName varchar(20) , @loginFrom varchar(50))
AS
BEGIN
DECLARE @userID int
SELECT @userID = vc_UserID FROM vc_User
WHERE UserName = @userName
INSERT INTO vc_UserLogin (vc_UserID, LoginLocation)
VALUES (@userID, @loginFrom)
RETURN @@identity
END
预期结果应该是更新的用户名和登录名。我并不是在寻找答案,只是有人因为我迷路而将我指向正确的方向。这应该很容易,我可能会考虑过度。
答案 0 :(得分:0)
除了作为过程的状态外,不要从存储过程中返回值。而是使用OUTPUT
参数。
我还建议使用OUTPUT
子句,如:
CREATE PROCEDURE vc_AddUserLogin (
@userName varchar(20) ,
@loginFrom varchar(50),
@id int OUTPUT
) AS
BEGIN
DECLARE @ids TABLE (id int);
INSERT INTO vc_UserLogin (vc_UserID, LoginLocation)
OUTPUT id INTO @ids -- "id" is the name of the id column in vc_UserLogin
SELECT u.vc_UserId, @loginFrom
FROM vc_users u
WHERE u.UserName = @userName;
SELECT @id = id
FROM @ids;
END;
然后将此代码称为:
DECLARE @id int;
EXEC vc_AddUserLogin @userName, @loginFrom, @id OUTPUT;
SELECT @id;
如果没有用户匹配NULL
,它将返回@userName
。