【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集

这篇具有很好参考价值的文章主要介绍了【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在平时使用sql语句查询时,in查询肯定少不了,多数用于一些数据统计或者测试类。in查询并不建议放到实际常用的查询列表里。
此篇文章主要简单聊聊,in查询方法内的参数设置方式,以及通过分隔函数将含有逗号隔开的字符串转为数据集进行查询

1、固定设置

在 SQL Server 中,你可以使用以下 SQL 语句来表示 IN 查询:

SELECT * FROM TableName WHERE ColumnName IN (value1, value2, value3)

其中,TableName 是你要查询的表名,ColumnName 是你要匹配的列名,value1、value2、value3 是你要匹配的值。你可以根据需要将多个值以逗号分隔放在括号中。

-- 查询名为customers的表中Name列值为'张三', '李四', '王五'的记录
SELECT * FROM customers WHERE Name IN ('张三', '李四', '王五')

这将返回符合条件的记录,满足 Country 列的值为 ‘张三’ 或 ‘李四’ 或 ‘王五’。

请注意,SQL 语句中的值需要根据列的数据类型进行正确的处理和引号包裹。对于字符串值,需要使用单引号或双引号将其括起来。对于其他数据类型,应根据其相应的语法规则进行处理。

2、参数化设置动态

在 SQL Server 中,我们可以使用参数化查询来动态设置 IN 查询条件。通过参数化查询,我们可以在查询中使用可变数量的参数值。

using System.Data.SqlClient;

string connectionString = "YourConnectionString";
string query = "SELECT * FROM TableName WHERE ColumnName IN (@Values)";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlCommand command = new SqlCommand(query, connection);
    
    // 可变数量的参数值
    List<int> parameterValues = new List<int> { 1, 2, 3, 4, 5 };
    
    // 构建参数化查询参数
    string parameterName = "@Values";
    string valueList = string.Join(",", parameterValues.Select((_, i) => $"{parameterName}{i}"));
    
    command.Parameters.AddWithValue(parameterName, valueList);
    
    // 执行查询
    SqlDataReader reader = command.ExecuteReader();
    
    while (reader.Read())
    {
        // 处理查询结果
    }
    
    reader.Close();
}

在C#编程里,在上述示例中,我们使用了一个包含参数值的 List(parameterValues)作为输入,该参数值将用于构建参数化查询。我们使用 string.Join 方法将参数名和索引拼接成一个逗号分隔的字符串,并将其作为参数值传递给 IN 子句。

注意在构建参数化查询时,为了防止 SQL 注入攻击,应使用参数化查询参数而不是直接将参数值插入到 SQL 查询字符串中。

注意:必须是通过程序进行参数化设置,否则查询无效

3、函数分隔动态参数

在 SQL Server 中,如果你想要将一个以逗号分隔的字符串转换为数据集供 IN 子句使用,你可以使用一些技巧来实现。

一种常见的方法是使用分割函数(Split Function)将字符串拆分为行,并将其作为临时表或表值函数的输入。然后,你可以在查询中使用这个临时表或表值函数来实现你的需求。

3.1、创建一个分割函数

创建一个分割函数(Split Function)。你可以创建一个自定义的分割函数,或者使用已有的分割函数,例如 STRING_SPLIT 函数(SQL Server 2016 及以上版本支持)。

CREATE FUNCTION dbo.SplitString
(
    @string NVARCHAR(MAX),
    @delimiter NVARCHAR(10)
)
RETURNS @result TABLE (Value NVARCHAR(MAX))
AS
BEGIN
    DECLARE @start INT,
            @end INT

    SET @start = 1
    SET @end = CHARINDEX(@delimiter, @string)

    WHILE @end > 0
    BEGIN
        INSERT INTO @result (Value)
        SELECT SUBSTRING(@string, @start, @end - @start)

        SET @start = @end + 1
        SET @end = CHARINDEX(@delimiter, @string, @start)
    END

    INSERT INTO @result (Value)
    SELECT SUBSTRING(@string, @start, LEN(@string) - @start + 1)

    RETURN
END

3.2、转数据集查询

使用分割函数将字符串转换为数据集,然后在查询中使用它。

DECLARE @inputString NVARCHAR(MAX) = 'value1,value2,value3'
DECLARE @delimiter NVARCHAR(10) = ','

SELECT t.* 
FROM TableName t
WHERE t.ColumnName IN (
    SELECT Value
    FROM dbo.SplitString(@inputString, @delimiter)
)

在上述示例中,我们首先创建了一个 SplitString 分割函数,其输入参数为字符串和分隔符。函数将字符串拆分为行,并以表格形式返回结果。

然后,我们声明了一个变量 @inputString 表示输入的以逗号分隔的字符串,以及一个变量 @delimiter 表示分隔符。在查询中,我们使用 SplitString 函数将字符串转换为数据集,然后将其与表中的 ColumnName 列进行比较,以实现 IN 查询的功能。

4、临时表方式

4.1、动态执行sql

在 SQL Server 中,你可以使用动态 SQL 来执行动态生成的 SQL 语句。动态 SQL 允许你在运行时构建和执行 SQL 语句,可以根据需要组合不同的查询条件。

DECLARE @sql NVARCHAR(MAX) = N'SELECT * FROM TableName WHERE ColumnName = @param'

DECLARE @param VARCHAR(100) = 'some_value'

EXEC sp_executesql @sql, N'@param VARCHAR(100)', @param

在上述示例中,我们声明了一个变量 @sql,其中存储了动态生成的 SQL 语句。这个 SQL 语句中使用了参数 @param,可以根据需要进行替换。

然后,我们声明了一个变量 @param 来指定参数的值。接下来,我们使用 sp_executesql 存储过程来执行动态 SQL 语句。该存储过程的第一个参数是动态 SQL 语句,第二个参数是定义参数的类型和名称的字符串,第三个参数是传入参数的实际值。

注意,使用动态 SQL 时应格外注意安全性,以防止 SQL 注入攻击。请确保输入的参数值正确经过验证和处理,或者考虑使用参数化查询来提高安全性。

4.2、数据添加到临时表

在 SQL Server 中,可以使用 INSERT INTO SELECT 语句将 EXEC sp_executesql 执行的结果集插入到临时表中。

-- 创建临时表
CREATE TABLE #TempTable (
    Column1 INT,
    Column2 VARCHAR(50)
)

DECLARE @sql NVARCHAR(MAX)
DECLARE @param INT = 1 -- 查询参数

-- 构建动态 SQL 语句
SET @sql = N'SELECT Column1, Column2 FROM YourTable WHERE Column3 = @param'

-- 执行动态 SQL 并将结果插入临时表
INSERT INTO #TempTable (Column1, Column2)
EXEC sp_executesql @sql, N'@param INT', @param

-- 查询临时表
SELECT *
FROM #TempTable

-- 删除临时表(可选)
DROP TABLE #TempTable

在上述示例中,首先创建了一个临时表 #TempTable,定义了与查询结果集匹配的列。然后,使用 sp_executesql 执行动态 SQL 语句,并将结果集通过 INSERT INTO SELECT 插入到临时表中。最后,可以通过查询 #TempTable 来查看结果集。

记得在使用完临时表后,根据需要及时删除它。可以使用 DROP TABLE 语句来删除临时表,以释放相关资源。文章来源地址https://www.toymoban.com/news/detail-556477.html

到了这里,关于【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL Server数据库查询速度慢的原因和解决方法

    SQL Server数据库查询速度慢的原因和解决方法 SQL Server 数据库 查询速度慢的原因有很多,常见的有以下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足

    2024年02月07日
    浏览(38)
  • 全网多种方法解决You have an error in your SQL syntax; check the manual that corresponds to your MySQL server

    今天在调试低代码的接口,突然报出如下的错误: 即 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \\\'desc,name,is_deleted ) VALUES(\\\'测试哈\\\',\\\'测试哈\\\',\\\'测试项目\\\',1 )\\\' at line 11 。 于是,查看控制台报出的详细错误信息,如下图所示

    2024年02月15日
    浏览(39)
  • Run sql server in docker

    Pull the latest image of SQL Server 2022 It\\\'s recommended to use the same string for \\\'name\\\' and \\\'hostname\\\', could be \\\'sqlserver2022\\\' or anything you like. 1. Start an interactive bash shell inside your running container 2. Inside the bash shell, connect locally with \\\'sqlcmd\\\' 3. You can connect with SSMS too,  using the public IP address, followed by comma

    2024年02月05日
    浏览(67)
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的固定帧率(C#)

    ​ Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度

    2024年02月09日
    浏览(33)
  • SQL Server 连接查询和子查询

    提示: 利用单表简单查询和多表高级查询技能,并且根据查询要求灵活使用内连接查询、外连接查询或子查询等。同时还利用内连接查询的两种格式、三种外连接查询语法格式和子查询的语法格式。 内连接查询(不同表之间查询) 自身连接查询 使用第二种格式实现内连接查询

    2023年04月12日
    浏览(28)
  • Windows server 2016——SQL server T-SQL查询语句

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。  公众号: 网络豆  座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面 介绍 一.SQL简介 1.SQL和T-SQL 2.T-SQL的组成 二.使用T-SQL语句操作数据表 1.插入数据 2.更新数据 ​编

    2024年02月09日
    浏览(36)
  • 【C#】使用C#连接SQL Server

    1. 连接数据库服务器 这里我使用的是SQL Server 身份验证(也可使用windows 身份验证) 账户信息如下: 登录名: sa 密码: mima (输入时自动隐藏) 2. 建立数据库和表 这里我的数据库信息如下: 服务器名: HG66MSSQLSERVER01 数据库名: DataBase01 表名: Table_1 三个属性分别为: I

    2023年04月12日
    浏览(27)
  • SQL Server的子查询

    子查询是嵌套在SELECT、INSERT、UPDATE、DELETE语句中或另一个子查询中的查询。 可以在允许表达式的任何位置使用子查询。 示例: 子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。 许多包含子查询的 Transact-SQL 语句也可以表述为联接。其他问

    2023年04月13日
    浏览(28)
  • SQL Server 数据查询

    KC表数据: XS表数据: XS_KC表数据: (1)在KC表中查询学分低于三分的课程信息,并按课程号升序排列 (2)在XS_KC表中按学号分组汇总学生的平均分,并按平均分的降序排列 (3)在XS_KC表中查询至少选修了2门课程的学生学号和姓名 (4)查询成绩不及格的学生的基本信息 方法1 方法2(子

    2023年04月19日
    浏览(41)
  • SQL Server:分页查询

    ❓ 需求描述:客户端查询数据库数据并显示在表格中。在数据库中进行一次查询,查询结果有1050条记录,但表格单页可显示行上限: 100,这时需要给本次查询记录分配 ? 页用来显示? 可以通过固定公式进行计算(c伪代码): 上一页和下一页业务逻辑(c伪代码) 7.3 SQL Serv

    2024年02月06日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包