gpt4 book ai didi

SQL 查询 - 从项目/元组列表中选择

转载 作者:行者123 更新时间:2023-12-01 08:07:41 26 4
gpt4 key购买 nike

我有一个从 Web 服务调用中检索到的对象列表,我需要将它们与我的一个数据库表中的某些行进行匹配。我的对象有几个属性:

Name - string
Type - string

名称和类型一起会在我的数据库中带回一个唯一的项目:

SELECT * FROM dbo.MyTable WHERE SomeName = @Name AND SomeType = @Type

这很好用;但是,我有一个名称/类型对列表,需要与我的数据库中的行进行匹配:

List<Tuple> values = [{ "Name1", "Type1" }, { "Name2", "Type2" }, { "Name3", "Type3" }]

我如何在 SQL 中编写查询,以返回基于元组列表的项目列表。上面的格式实际上不是我的值的格式,所以不用担心编写一些解析逻辑来获取值。

最佳答案

你可以使用 Table-Valued Parameters in SQL Server 2008 (ADO.NET) .

SQL

CREATE TYPE [dbo].[MyTableType] AS TABLE
(
[SomeName] NVARCHAR(50),
[SomeType] NVARCHAR(50)
)

CREATE TABLE [dbo].[MyTable]
(
[SomeName] NVARCHAR(50),
[SomeType] NVARCHAR(50)
)

INSERT [dbo].[MyTable]
VALUES ('Name1', 'Type1'),
('Name2', 'Type2'),
('Name3', 'Type3'),
('Name4', 'Type4')

C#

var values = new List<Tuple<string, string>> { Tuple.Create("Name1", "Type1"), Tuple.Create("Name2", "Type2"), Tuple.Create("Name3", "Type3") };

var dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("SomeName", typeof(string)));
dataTable.Columns.Add(new DataColumn("SomeType", typeof(string)));

values.ForEach(v => dataTable.Rows.Add(v.Item1, v.Item2));

using (var connection = new SqlConnection(@"Data Source=.;Initial Catalog=Tom;Integrated Security=True"))
{
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandText =
"SELECT * " +
"FROM [dbo].[MyTable] mt " +
"INNER JOIN @MyTableType mtt " +
" ON mt.[SomeName] = mtt.[SomeName] " +
" AND mt.[SomeType] = mtt.[SomeType]";

SqlParameter parameter = command.Parameters.AddWithValue("@MyTableType", dataTable);
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "[dbo].[MyTableType]";

connection.Open();
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine("mt.[SomeName]: {0}, mt.[SomeType]: {1}, mtt.[SomeName]: {2}, mtt.[SomeType]: {3}",
reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3));
}
}
}

Console.ReadKey();

关于SQL 查询 - 从项目/元组列表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com