2

我希望在我的存储过程中传递一个字符串列表,我试图设置以下教程的指示,但我被困在最后一步:https ://larrymcnutt.wordpress.com/2014/11/05 /传递-a-list-int-from-c-to-at-sql-stored-procedure/

我在我的数据库中创建了一个这样的用户定义类型:

create type dbo.myList as table
(
    element nvarchar(22)
)
go

在我的课堂上,我使用正确的类型和列表调整我的代码

new SqlMetaData("element", SqlDbType.NVarChar, 22)

但是我遇到的问题是我的存储过程返回多个值,所以我使用这样的方法:

    [Function(Name = "dbo.MyStoredProcedure_S")]
    [ResultType(typeof(Value))]
    [ResultType(typeof(Structure))]
    [ResultType(typeof(Error))]
    public IMultipleResults MyStoredProcedure_SMultipleResults(
        [Parameter(Name = "id", DbType = "Int NOT NULL")] int id,
        [Parameter(Name = "myList", DbType = "Structured")] myCollection myList)
    {
        var result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), id, myList);
        return (IMultipleResults)(result.ReturnValue);
    }

在这种情况下,我还没有找到指示如何将我的列表作为参数传递的资源。

返回的异常:

表类型参数“@p1”必须具有有效的类型名称。

我还尝试通过像这样的简单字符串列表来更改变量的类型

[Parameter(Name = "myList", DbType = "Structured")] List<string> myList

但我有同样的结果

谢谢

编辑:这是我用于存储过程的代码:

CREATE PROCEDURE [dbo].[myStoredProcedure]
    @id int,
    @myList myList READONLY,
AS
BEGIN
    SELECT ...
    WHERE ref IN (SELECT element FROM @myList)
    ...
END

我设法像这样执行我的存储过程:

DECLARE @return_value int
DECLARE @list [dbo].[myList]
INSERT INTO @list VALUES ('stringval'), ('otherstringval');

EXEC    @return_value = [dbo].[sp_ATL_RechercheHuilesMagasin_S]
    @id = 1,
    @myList = @list

SELECT  'Return Value' = @return_value

它返回我的 3 个表中的数据,对应于我的 c# 代码中定义的结果“Value”、“Structure”、“Error”

4

0 回答 0