首页 > 解决方案 > 创建具有不定数量参数的存储过程

问题描述

我必须制作一个插入过程,它需要不定数量的参数,例如

USER_ID, First_Name, Last_Name, Fav film, 'Fav Book', Fav Music

EXEC dbo.sp_whatever 'ID999', 'Tommy', 'Soprano', 'Jack', 'Forest Gump', 'Book_name', 'Music_Name'

或者

USER_ID, First_Name, Last_Name, Fav film

EXEC dbo.sp_whatever 'ID999', 'Ashley', 'Collins', 'Cujo'

然后根据给定的参数,它应该失败或继续并根据提供的参数在几个表中创建新条目(自我解释)。

现在我完全不知道如何解决这个问题,我如何处理不确定数量的参数,或者什么是正确、正确的方法来解决这个问题?

编辑:

基本上。这将是情景。我编写了一个名为“InsertNewUser”的存储过程,我有一个想要注册的人,所以我执行“EXEC InsertNewUser ...”并将有关此人的所有相关信息插入到正确的表中。这基本上就是我想要实现的目标。(我知道场景很愚蠢,别担心是虚构的。)

标签: sqlsql-servertsqlstored-procedures

解决方案


有多种方法可以通过存储过程传递多个参数值。使用以下方法,您只需根据项目要求创建一个参数。

方法 #1 – 将 CSV:字符串列表作为参数传递给 (N)VARCHAR 数据类型参数,然后在 SP 或 UDF 中对其进行拆分/解析。

方法 #2 – 传递 XML: 字符串作为 XML 数据类型参数。我们需要在 SP 中解析 XML。

方法#3 – 使用临时表:在 SP 内部,它是在执行之前在外部创建的。这里不需要向 SP 传递任何参数。

方法 #4 – 使用 TVP:使用 SQL Server 2008 及更高版本,您可以创建 TVP 或表值参数并使用用户定义的表类型声明它们。然后可以使用这些 TVP 将多行数据发送到 SP 或 UDF,而无需创建临时表或多个参数。

方法 #5 – 传递 JSON 字符串:作为 NVARCHAR 数据类型参数。我们需要在 SP 中解析 JSON。

参考


推荐阅读