首页 > 数据库 > mysql教程 > 如何使用用户定义的表类型将字符串列表传递给 SQL Server 存储过程?

如何使用用户定义的表类型将字符串列表传递给 SQL Server 存储过程?

Barbara Streisand
发布: 2025-01-13 10:02:42
原创
131 人浏览过

How to Pass a List of Strings to a SQL Server Stored Procedure Using a User-Defined Table Type?

使用用户定义表类型将字符串列表传递给 SQL Server 存储过程

从 C# 调用 SQL Server 存储过程时,您可能需要将字符串列表作为参数传递。虽然标准参数足以处理简单数据类型,但对于列表等复杂数据结构,则需要更复杂的方法。

为了传递字符串列表,我们可以利用 SQL Server 的用户定义表类型 (UDTT) 功能。此功能允许我们创建一个模拟表的自定义数据类型,从而存储数据集合。

创建用户定义表类型

首先,我们需要创建用户定义表类型 (UDTT):

<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);</code>
登录后复制

此 UDTT 定义了一个名为“Item”的单列表,用于保存字符串。

修改存储过程

接下来,我们修改存储过程以接受 UDTT 参数:

<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- 只返回我们传入的项目
    SELECT l.Item FROM @list l;
END</code>
登录后复制

在 C# 中填充 UDTT

在 C# 中,我们使用 DataTable 填充 UDTT:

<code class="language-csharp">using (var table = new DataTable()) {
    table.Columns.Add("Item", typeof(string));

    // ...此处添加循环填充字符串列表到DataTable的代码...

    SqlParameter pList = new SqlParameter("@list", SqlDbType.Structured);
    pList.Value = table;
}</code>
登录后复制

将 UDTT 参数传递给存储过程

最后,我们将 UDTT 参数传递给存储过程:

<code class="language-csharp">using (var cmd = new SqlCommand("exec sp_UseStringList @list", con)) {
    cmd.Parameters.Add(pList);

    using (var dr = cmd.ExecuteReader()) {
        while (dr.Read())
            Console.WriteLine(dr["Item"].ToString());
    }
}</code>
登录后复制

这种方法允许我们将字符串列表高效地传递给 SQL Server 存储过程。

以上是如何使用用户定义的表类型将字符串列表传递给 SQL Server 存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板