我想插入一条记录,然后用存储过程返回该记录的细节:嵌套的INSERT,UPDATE,DELETE或MERGE语句在SELECT语句是不允许
USE
TEST
GO
CREATE PROCEDURE AddProject(
-- In
@_title NVARCHAR(200),
@_description NVARCHAR(MAX),
-- Out
@Title NVARCHAR(200) OUT,
@Description NVARCHAR(MAX) OUT)
AS
BEGIN
SELECT
[ProjectsTable.ProjectID],
[Title],
[Description]
FROM
(INSERT INTO [Projects] ("Title", "Description")
OUTPUT inserted.ProjectID
VALUES (@_title, @_description)) ProjectsTable
END
我米得到这个错误,我做错了什么?
消息10729,级别15,状态1,过程AddProject,第31行
嵌套INSERT,UPDATE,DELETE或MERGE语句未SELECT语句不是行的直接来源用于允许INSERT语句。
感谢回答:
的程序弄成这个样子:
USE
TEST
GO
CREATE PROCEDURE AddProject(
-- In
@_title NVARCHAR(200),
@_description NVARCHAR(MAX),
-- Out
@ProjectID INT OUT,
@Title NVARCHAR(200) OUT,
@Description NVARCHAR(MAX) OUT
)
AS
BEGIN
BEGIN TRAN
INSERT INTO
[Projects]
("Title", "Description")
VALUES
(@_title, @_description)
SET @ProjectID = SCOPE_IDENTITY();
SELECT
@Title = [Title],
@Description = [Description]
FROM
[Projects]
WHERE
[Projects].[ProjectID] = @ProjectID
COMMIT
END
我打电话这样说:
Declare @ProjectID as INT
Declare @Title as NVARCHAR(200)
Declare @Description as NVARCHAR(MAX)
EXEC AddProject "Test project", "A test project", @ProjectID output, @Title output, @Description output
SELECT @ProjectID, @Title, @Description
什么是回归了,你正在传递同一数据的目的是什么? –
首先插入,然后获取ID的SCOPE_IDENTITY(),然后返回Select语句。但我同意@ George2.0Hope。 –
@ George2.0Hope - 注意来自INSERT的输出 – Jimmyt1988