使用用户定义表类型将字符串列表传递给 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中文网其他相关文章!