如何使用 SQL Server 中的存储过程在单个查询中插入多行
Posted
技术标签:
【中文标题】如何使用 SQL Server 中的存储过程在单个查询中插入多行【英文标题】:How to insert multiple rows in a single query using a stored procedure in SQL Server 【发布时间】:2018-05-17 03:16:39 【问题描述】:CREATE PROCEDURE Usp_insertgender
(@gendervalues VARCHAR(MAX))
AS
BEGIN
INSERT INTO sparsha.dbo.Genders ([GenderName])
VALUES @gendervalues;
END
我尝试了上述过程,但出现错误
消息 102,级别 15,状态 1,过程 Usp_insertgender,第 10 行 “@gendervalues”附近的语法不正确。
我将 @gendervalues
值传递为 ('1'),('2')
【问题讨论】:
【参考方案1】:可能最简单的方法是定义TVP:
CREATE TYPE myTVPType AS TABLE( v VARCHAR(50));
GO
CREATE PROCEDURE Usp_insertgender (@gendervalues myTVPType READONLY)
AS
BEGIN
INSERT INTO sparsha.dbo.Genders ([GenderName])
SELECT v
FROM @gendervalues;
END;
如何称呼它:
DECLARE @tvp AS myTVPType;
INSERT INTO @TVP (v)
VALUES ('1'),('2');
EXEC Usp_insertgender @TVP;
GO
【讨论】:
当执行过程出错时执行 Usp_insertgender (1),(2) '1' 附近的语法不正确。 hi lad2025 感谢您为如何调用程序提供解决方案。请通过将参数指定为 ('1'),('2') 并插入多个值来解决如何在存储过程中调用它。这里的问题是上面的插入取决于另一个插入查询。by giving parameter as ('1'),('2')
我看到的唯一方法是动态 SQL,但在这里展示它将是巨大的反模式。【参考方案2】:
试试这个:(使用动态 SQL)
CREATE PROCEDURE Usp_insertgender
(@gendervalues VARCHAR(MAX))
AS
BEGIN
DECLARE @sql nvarchar(2000)
SET @sql = N'INSERT INTO sparsha.dbo.Genders ([GenderName])
VALUES ' + @gendervalues
EXEC sp_executesql @sql
END
【讨论】:
@guna:您好,您收到了两个很好的答案。请接受其中之一以上是关于如何使用 SQL Server 中的存储过程在单个查询中插入多行的主要内容,如果未能解决你的问题,请参考以下文章
如何为每次执行将过程结果存储在 SQL Server 中的新(单个)文本文件中