加载程序告诉我时出现错误
无法将值NULL插入表“ MCAST.a01.tbl_enrollmentRequests”的“ requestID”列中;列不允许为空。INSERT失败。
现在requestID
是一种UNIQUEIDENTIFIER
变量。是UNIQUEIDENTIFIER
自动生成的数字吗?以下是我的代码示例,您可以在其中查看requestID
。
CREATE PROCEDURE [a01].[usp_auditAcceptRequest]
(@AccountID UNIQUEIDENTIFIER,
@GroupID UNIQUEIDENTIFIER,
@Reason NVARCHAR(45)
)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [a01].[tbl_enrollmentRequests] (requestDate, groupID, accountID)
VALUES (SYSDATETIMEOFFSET(), @GroupID, @AccountID)
DECLARE @RequestID UNIQUEIDENTIFIER
SET @RequestID = (SELECT requestID
FROM [a01].tbl_enrollmentRequests
WHERE groupID = @GroupID AND accountID = @AccountID)
INSERT INTO [a01].[tbl_enrollmentAudits] (entryDate, requestID, groupID, accountID, accepted, reason)
VALUES (SYSDATETIMEOFFSET(), @RequestID, @GroupID, @AccountID, 1, @Reason)
DELETE FROM [a01].[tbl_enrollmentRequests]
WHERE requestID = @RequestID
END;
GO
这是我执行上述程序的地方
BEGIN
DECLARE @AccountID UNIQUEIDENTIFIER;
DECLARE @GroupID UNIQUEIDENTIFIER;
(SELECT @AccountID = accountID
FROM [a01].[tbl_userAccounts] WHERE accountUsername='saraht');
(SELECT @GroupID = groupID FROM [a01].[tbl_groups] WHERE groupName LIKE '%Foo%');
EXECUTE [a01].[usp_addRequest] @AccountID, @GroupID;
END;
GO
谢谢你的帮助 !!
就是说,auniqueidentifier
是普通列,如果要具有自动分配的值,则需要向该列添加默认值。通常,用于默认值的函数是newid()
或newsequentialid()
。
根据发布的表定义进行编辑;您可以使用此:
CREATE TABLE [a01].[tbl_enrollmentRequests](
requestID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT (NEWID()),
requestDate DATETIMEOFFSET NOT NULL,
groupID UNIQUEIDENTIFIER REFERENCES [a01].[tbl_groups] (groupID) NOT NULL,
accountID UNIQUEIDENTIFIER REFERENCES [a01].[tbl_userAccounts] (accountID) NOT NULL
);
话虽如此,您也可以在插入之前预先生成一个uniqueidentifier并将其分配给存储过程中的变量,因为可以假定生成的GUID与任何现有的GUID都不冲突。这样做的好处是,即使不从OUTPUT
子句中检索出该行的ID,您也知道该行的ID 。
关于性能的通知:newid()
由于随机性,插入会导致许多页面拆分,因此大量的具有随机GUID的集群主键(由生成)的行是性能问题。该newsequentialid()
功能几乎可以完全解决性能问题,但可以使生成的GUID易于猜测,因此只能在不需要“随机” ID的情况下使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句