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

时间:2011-10-11 15:38:39

标签: 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

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

  

操作数类型冲突:数字与uniqueidentifier

不兼容

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

1 个答案:

答案 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');