Sql server 将“插入到”与“选择”一起使用时出错
我正在尝试在MSSQL上编译此存储过程:Sql server 将“插入到”与“选择”一起使用时出错,sql-server,Sql Server,我正在尝试在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 uniqueidentifi
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'
作为值,但得到了相同的错误。它并没有说哪种类型实际上是冲突的。我做错了什么?问题是SCOPE\u 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');
问题在于
SCOPE\u 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');
哦,我是个白痴。你完全正确-因为我正在动态生成一个新ID,所以我可以将它存储在一个变量中。谢谢哦,我是个白痴。你完全正确-因为我正在动态生成一个新ID,所以我可以将它存储在一个变量中。谢谢