`
yeak2001
  • 浏览: 103096 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

存储过程中的字符串拼接问题

阅读更多
-1. 构造使用IN子句的动态Transact-SQL方法进行编号查询

--a. 要查询的字段类型是数字型

--查询的值列表
DECLARE @idlist varchar(100)
SET @idlist='1,2,3'

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO

--b. 要查询的字段类型是字符型
--查询的值列表已经加上了字符串边界符
DECLARE @idlist varchar(100)
SET @idlist='''a'',''b''''a'',''c'''

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO

--查询的值列表没有字符串边界符
DECLARE @idlist varchar(100)
SET @idlist='a,b''a,c'

--由于是字段类型是,所以在拼接时,必须为其加上字符串边界符(')
DECLARE @s varchar(1000)
SET @s=''''
    +REPLACE(REPLACE(@idlist,'''',''''''),',',''',''')
    +''''

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@s+')')
GO

/*=====================================================*/


--2. 使用LIKE或者PATINDEX进行编号查询
--查询的值列表
DECLARE @idlist varchar(100)
SET @idlist='1,2,3'

--查询
SELECT * FROM tbname WHERE CHARINDEX(','+RTRIM(fdname)+',',','+@idlist+',')>0
SELECT * FROM tbname WHERE PATINDEX('%,'+RTRIM(fdname)+',%',','+@idlist+',')>0
SELECT * FROM tbname WHERE ','+@idlist+',' LIKE '%,'+RTRIM(fdname)+',%'
GO

/*=====================================================*/


--3. 编号查询中常见的错误
--a. 最容易犯的错误:表达式充当表达式列表。
DECLARE @s varchar(100)
SET @s='1'
SELECT id,name FROM sysobjects WHERE id IN(@s)
/*--结果
id          name
---------------- ------------
1           sysobjects
--*/

SET @s='1,2,3'
SELECT id,name FROM sysobjects WHERE id IN(@s)
/*--结果
服务器: 消息 245,级别 16,状态 1,行 3
将 varchar 值 '1,2,3' 转换为数据类型为 int 的列时发生语法错误。
--*/
GO

--b. 生成动态Transact-SQL语句时忽略了数据类型。
DECLARE @s varchar(100)
SET @s='U,S'
EXEC('SELECT id,name FROM sysobjects WHERE id IN('+@s+')')
/*--结果:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'S' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'U' 无效。
--*/
GO

--c. 忽略了比较的精确性问题。
--要查询的数据
DECLARE @t TABLE(col varchar(10))
INSERT @t SELECT '1'
UNION ALL SELECT '11'
UNION ALL SELECT '111'
UNION ALL SELECT '22'

--查询
DECLARE @s varchar(100)
SET @s='111,22'
SELECT * FROM @t WHERE CHARINDEX(col,@s)>0
/*--结果
col       
----------
1
11
111
22
-*/
GO
分享到:
评论

相关推荐

    存储过程拼接字符串

    在SQL语言中,存储过程是一种预编译的SQL语句集合...在编写存储过程时,根据所使用的数据库系统选择适当的方法进行字符串拼接是非常重要的。理解这些功能可以帮助我们更有效地构造动态SQL,提高代码的可读性和维护性。

    ORACLE 存储过程返回结果集,拼接为字符串输出为clob

    CLOB变量需要dbms_lob.createtemporary,临时表空间中,建立临时LOB。 大数据量,返回值虽然是CLOB,依然会报错; CLOB变量需要dbms_lob.createtemporary,临时表空间中,建立临时LOB。 大数据量,返回值虽然是CLOB...

    ibatis拼接字符串

    在本篇文章中,我们将深入探讨如何使用 Java 编程语言结合 iBatis 框架进行 SQL 字符串的动态拼接。通过分析提供的代码片段,我们可以了解到在实际开发过程中,这种动态 SQL 的构建方式非常常见,尤其是在处理复杂的...

    将excal批量数据插入到postgresql数据库(目前实现字符串拼接的方式)

    在本教程中,我们将聚焦于如何将Excel数据批量导入到PostgreSQL数据库,特别关注一种常见的方法——通过字符串拼接的方式。PostgreSQL是一个功能强大的开源关系型数据库管理系统,而Excel则是广泛使用的电子表格工具...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    标题和描述所提及的问题是关于如何在Mapper.xml文件中处理字符串形式的参数,这些参数由逗号分隔,并在`AND`语句中拼接`OR`子句来实现动态查询。这种场景在处理用户多选过滤条件时非常常见,比如在一个搜索框中,...

    Android string拼接

    本文将详细介绍如何在Android项目中利用`String`资源进行字符串拼接,包括基本原理、实现方法及注意事项。 #### 基本概念 1. **资源文件**:在Android中,我们可以将常量文本存储在资源文件中,通常这些资源文件...

    SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf

    SQL 中存储过程中 SQL 语句的单引号和双引号问题 在 SQL 中,单引号和双引号的问题是一个常见的混淆点,特别是在存储过程中编写 SQL 语句时。下面将对此问题进行详细的解释和总结。 一、单引号和双引号的基本概念 ...

    javascript中字符串拼接需注意的问题

    在JavaScript编程中,字符串拼接是一项常见的操作,但如果不注意其内部的工作机制,可能会导致性能问题。本篇文章将深入探讨JavaScript中的字符串拼接,并对比C#中的StringBuilder,以揭示两者在处理大量字符串拼接...

    无穷字符串 解答

    - 字符串拼接:在文件中,通过"AB"字符串拼接为"BA"的逻辑,体现了字符串操作的基础知识。 - 函数重载:函数"InfiniteStrings"被重载,分别处理不同的参数列表,包括两个字符串和一个整数,以及单独的一个整数参数。...

    drools从字符串中动态加载规则

    ### Drools从字符串中动态加载规则 在使用Drools规则引擎时,有时我们需要实现更加灵活的规则管理方式。例如,在开发过程中,我们可能希望不通过每次修改代码或重启服务来更新业务规则,而是能够在运行时动态地更改...

    JavaScript 学习笔记二 字符串拼接

    在JavaScript编程中,字符串拼接是一项基础且频繁使用的操作。然而,在初学者使用简单的加号(+)进行字符串拼接时,可能会对性能产生不利影响。这是因为JavaScript引擎在幕后进行了一系列复杂的步骤来处理字符串拼接...

    C语言json字符串的生成与解析

    在C语言中,处理JSON字符串涉及到解析JSON文本为数据结构,以及将数据结构转换为JSON字符串。以下是对C语言中JSON字符串生成与解析的详细说明: 1. JSON数据格式: JSON是一种基于文本的格式,它使用键值对来表示...

    Oracle接收长度大于4000的字符串

    通过以上步骤,可以在.NET环境中成功处理和传递长度超过4000个字符的字符串至Oracle数据库,并通过存储过程读取这些数据。这种方式不仅能够解决字符串长度限制的问题,还能够提高应用程序的灵活性和扩展性。

    javascript中字符串拼接详解

    3. 在现代浏览器中,字符串拼接的性能通常不是问题,除非拼接操作极其频繁,例如在循环中大量拼接。 总之,理解JavaScript字符串的不可变性以及如何优化大量字符串拼接操作对于编写高效代码至关重要。在必要时,...

    链接任意多个字符串

    这个过程通常被称为字符串拼接。 在C语言中,我们可以使用`strcat()`函数来连接两个已存在的字符串,但这个函数只能连接两个字符串。如果需要连接三个或更多的字符串,我们需要多次调用`strcat()`或者使用其他方法...

    c# 字符串转 32位 16进制

    3. **字符串拼接**:将每个字符转换后的16进制字符串拼接起来,形成完整的32位16进制表示。可以使用`string.Concat()`或`StringBuilder`类来实现这个过程。 以下是一个简单的示例代码,演示了如何将字符串转换为32...

    C语言合并多个char *类型的字符串

    在C语言中,合并多个`char *`类型的字符串是一项常见的任务,这通常涉及到字符串...总的来说,这个过程涉及了C语言中的字符串操作、指针、内存管理和数组等核心概念,对于理解C语言的底层工作原理和内存管理非常重要。

    逐个替换字符串中的指定字符

    根据给定文件的信息,我们可以详细地探讨一下在编程中如何实现“逐个...综上所述,通过理解字符串的基本概念、掌握逐个替换字符串中指定字符的具体实现方法以及注意相关的细节问题,我们可以有效地解决此类编程问题。

    易语言八种方法倒转字符串

    3. **字符串拼接法** 逐个将字符串的字符从后向前添加到新的字符串,直到原字符串结束。虽然效率较低,但思路简单明了。 4. **递归法** 递归函数可以在每次调用时将字符串的最后一个字符与前一次的返回值连接,...

Global site tag (gtag.js) - Google Analytics