Brett 的查询围绕将动态字符串列表合并到 SQL Server 存储过程中。挑战在于如何在不影响性能的情况下有效地传递此列表。
将字符串连接到逗号分隔列表的传统方法有局限性,尤其是对于较大的数据集。但是,还有更有效的选项可用。
用户定义的表类型 (UDT):
SQL Server 2008 引入了用户定义的表类型 (UDT),它允许您创建可以存储表格数据的自定义数据类型。您可以创建一个名为“StringList”的 UDT 并在存储过程中使用它。
SQL:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
以下 C# 代码演示如何使用此 UDT:
var table = new DataTable(); table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString()); var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;
在存储过程中,您可以使用以下方式访问列表:
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN SELECT l.Item FROM @list l; END
以上是如何从 C# 高效地将动态字符串列表传递到 SQL Server 存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!