将INSERT INTO与SELECT一起使用时出错

Dis*_*oat 0 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 uniqueidentifier;
    SET @noticeid = SCOPE_IDENTITY();

    INSERT INTO tbl_NoticesInbox (userid, noticeid)
    (SELECT id, @noticeid FROM tbl_User WHERE role='Staff');

END
GO
Run Code Online (Sandbox Code Playgroud)

它应该在一个表中插入"通知",然后在每个"员工"用户的收件箱表中插入"通知".但是在编译时我得到了这个错误:

操作数类型冲突:数字与uniqueidentifier不兼容

"角色"字段是nbarchar(10)我尝试N'Staff'的值,但我得到了相同的错误.它没有说哪些类型实际上是冲突的.我究竟做错了什么?

Jam*_*iec 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');
Run Code Online (Sandbox Code Playgroud)