在 SQL Server 2008 中使用集合作为函数/存储过程的参数?

Posted

技术标签:

【中文标题】在 SQL Server 2008 中使用集合作为函数/存储过程的参数?【英文标题】:Using sets as inparameters to function/sproc in SQL Server 2008? 【发布时间】:2009-12-28 11:08:03 【问题描述】:

是否可以在 SQL Server 2008 中使用一个集合,例如 (1, 2, 3, 4, 5) 作为 Sproc、函数或视图的参数?

对于这个 SLQ,我应该使用 Sproc、函数还是视图?

WITH Scores AS(
    SELECT
        ItemId, SUM(Score) AS Score

    FROM [Presenta].[presenta].[LpivScores]

    WHERE
        // HERE I want (1, 2, 3, 4, 5) to be the inparameter, like @inParam
        ListPropertyItemId IN (1, 2, 3, 4, 5)

    GROUP BY
        ItemId
)

-- I want this to be returned
SELECT
    i.Id,
    s.Score
FROM
    Scores s,
    Items i
WHERE
    s.ItemId = i.Id

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

你可能想看看Table Valued Parameters。

【讨论】:

【参考方案2】:

请看:

T-SQL stored procedure that accepts multiple Id values Passing array as Parameter to SQL 2005 stored procedure

在 SQL Server 2008 中,您可以使用table valued parameters。

【讨论】:

【参考方案3】:

这里还有一些技术可以查看分开的表值参数。

您可以继续使用逗号分隔值,但您需要创建一个函数来拆分这些逗号分隔值。 http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm

其他方法是使用 XML 参数。 http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx

【讨论】:

以上是关于在 SQL Server 2008 中使用集合作为函数/存储过程的参数?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2008 中执行 while 循环

在 SQL Server 2008 的拆分函数中使用连接表列

使用 SQL Server 2008 在 WHERE 子句中使用 SUBSTRING 函数 [重复]

如何使用 C# 可靠地确定安装了 SQL Server 2008 的哪些组件?

如何在 SQL Server 2008 中恢复 SQL Server 2014 备份

在 Sql Server 中将集合作为参数传递时使用 IN 子句