我正在尝试在MSSQL上编译这个存储过程:
ALTER PROCEDURE [dbo].[sp_Notice_insert]
@type text,
@message text
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO tbl_Notices (id, type, message)
VALUES (NewID(), @type, @message);
DECLARE @noticeid uniqueidentifier;
SET @noticeid = SCOPE_IDENTITY();
INSERT INTO tbl_NoticesInbox (userid, noticeid)
(SELECT id, @noticeid FROM tbl_User WHERE role='Staff');
END
GO
它应该在一个表中插入“通知”,然后在每个“员工”用户的收件箱表中插入“通知”。但是在编译时我得到了这个错误:
操作数类型冲突:数字与uniqueidentifier
不兼容
'角色'字段为nbarchar(10)
,因此我尝试了N'Staff'
作为值,但我得到了相同的错误。它没有说哪些类型实际上是冲突的。我做错了什么?
答案 0 :(得分:6)
问题是SCOPE_IDENTITY()
返回当前范围内输入IDENTITY
列的最后一个值,因此默认返回一个数值。
在我看来,您希望创建一个NEWID()
并使用它们来插入标题和相关记录:
DECLARE @noticeid uniqueidentifier;
SET @noticeid = NEWID();
INSERT INTO tbl_Notices (id, type, message)
VALUES (@noticeid , @type, @message);
INSERT INTO tbl_NoticesInbox (userid, noticeid)
(SELECT id, @noticeid FROM tbl_User WHERE role='Staff');