Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将“插入到”与“选择”一起使用时出错_Sql Server - Fatal编程技术网

Sql server 将“插入到”与“选择”一起使用时出错

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

我正在尝试在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'
作为值,但得到了相同的错误。它并没有说哪种类型实际上是冲突的。我做错了什么?

问题是
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,所以我可以将它存储在一个变量中。谢谢