加载程序告诉我
时出错无法将值NULL插入列'requestID',表'MCAST.a01.tbl_enrollmentRequests';列不允许空值。 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
感谢您的帮助!!
答案 0 :(得分:7)
话虽这么说,uniqueidentifier
是一个普通列,如果你想拥有一个自动分配的值,你需要在列中添加一个默认值。通常,默认使用的函数为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。
关于性能的通知:具有随机GUID的聚簇主键(由newid()
生成)的大量行是性能问题,因为插入将导致由于随机性而发生许多页面拆分。 newsequentialid()
函数几乎完全解决了性能问题,但它使生成的GUID可以猜测,因此只能在" random"不需要ID。
答案 1 :(得分:-3)
UNIQUEIDENTIFIER是否是自动生成的数字?
你问我们什么?您可以查看表定义,看看是否定义了设置新uniqueidentifier的默认值。
如果不是 - 那么没有。
如果您尝试插入null,则也不会(因为您的插入会覆盖默认值)。
---编辑:
根据您发布的表格定义:
requestID UNIQUEIDENTIFIER PRIMARY KEY
没有定义设置它的默认值。所以没有。