我希望在我的存储过程中传递一个字符串列表,我试图设置以下教程的指示,但我被困在最后一步: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”