【问题标题】:How to pass a list of Ints to a stored procedure如何将 Ints 列表传递给存储过程
【发布时间】:2014-06-24 04:02:32
【问题描述】:

我使用以下方法在 SQL Server 2012 中创建了一个存储过程:

CREATE TYPE dbo.EncTypeFilter
AS TABLE
(
  EncTypeFilterID int
);
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE GetExplorerData    
@EncTypeFilterList AS dbo.EncTypeFilter READONLY
AS
BEGIN
   ...
END

当我使用以下命令调用该过程时,我收到错误“操作数类型冲突:varchar 与 EncTypeFilter 不兼容”:

EXEC GetExplorerData @EncTypeFilterList='(1,2,3,4)'

那么,如何将 Ints 列表作为参数传递给过程?

【问题讨论】:

    标签: sql stored-procedures


    【解决方案1】:

    您不能从 varchar 自动转换为表格内容。使用这个:

    DECLARE @EncTypeFilterList dbo.EncTypeFilter
    INSERT INTO @EncTypeFilterList VALUES (1), (2), (3), (4);
    EXEC GetExplorerData @EncTypeFilterList
    

    【讨论】:

    • 我需要从 C# 应用程序传递一组索引。该数组包含过滤器选项的索引。所以也许我根本不需要 EncTypeFilterList 表。我只需要能够传入用户选择的过滤器选项的索引列表,并在我的 where 子句中使用该列表,如下所示: Where ec.EncTypeID IN ( [List of Indexes passed into the stored proc] )
    • 随你怎么做。数组不能直接传递,但您可以将查询的参数替换为连接的字符串。但是,不熟悉 C3 的选项。
    • 我在这篇文章中找到了答案。 stackoverflow.com/questions/11102358/… 感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多