【问题标题】:SQL insert into select return valuesSQL插入选择返回值
【发布时间】:2014-08-08 16:11:38
【问题描述】:

帮助了解如何从存储过程中返回值,这是一个多值,

需要返回新插入行的Id和Status

这张桌子

create table mytable
(
id UNIQUEIDENTIFIER,
name NVARCHAR(255),
tran_status NVARCHAR(255)
);

这段存储过程

ALTER PROCEDURE UpdateByXml
(
@XML ntext
)
AS

DECLARE @idoc INT
EXEC sp_xml_preparedocument @idoc OUTPUT,  @XML

BEGIN

DECLARE @t TABLE(
            [Name] NVARCHAR(255) NOT NULL,
            [tran_status] NVARCHAR(255) NOT NULL
        )

INSERT @t 
    SELECT * FROM OPENXML(@idoc, '//item', 1) 
        WITH (
            [Name] NVARCHAR(255) '@Name'
            , [tran_status] NVARCHAR(255) '@tran_status'
        ) a

        INSERT INTO mytable ([id], [name], [tran_status])
        SELECT 
            NEWID()
            ,t.Name
            ,t.tran_status
        FROM @t t
END

存储过程工作只需要添加返回插入语句的功能,但前提是完全插入,因为将来不会从临时表中插入所有值

【问题讨论】:

  • ntexttextimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)varbinary(max)See details here
  • 非常感谢你会记住的
  • 如果您传入 XML - 为什么不使用 XML 数据类型作为参数?那会更有意义.....
  • 你知道我刚刚问了别人

标签: sql sql-server xml tsql stored-procedures


【解决方案1】:

在插入中使用output 子句。

INSERT INTO mytable 
([id], [name], [tran_status])
OUTPUT INSERTED.[id],
INSERTED.tran_status
SELECT...

【讨论】:

  • 非常感谢。我真的忘记了这件事。只是一个问题如何在 NEXT STEP 的另一条语句中使用此输出
猜你喜欢
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 2018-01-04
  • 2013-10-10
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多