`
yeak2001
  • 浏览: 101133 次
  • 性别: 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语句拼接字符串

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

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

    oracle 存储过程中某入参是逗号分隔,并且参数要使用在in过滤语句中

    oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现

    Oracle 存储过程总结 二、字符串处理相关函数

    项目中有涉及存储过程对字符串的处理,所以就将在网上查找到的资料汇总,做一个信息拼接式的总结。

    JavaScript 学习笔记二 字符串拼接

    var str=”hello”; str+=”world”; 实际上,这段代码在幕后执行的步骤如下:...解决方法是用Array对象存储字符串,然后用join()方法(参数是空字符串)创建最后的字符串。想像用下面的代码代替前面的代码: 代码如下:

    java关于字符串拼接的笔试题-git-notes:我为学习git所做的Markdown笔记。注释在README.md中

    下面是我学习git过程的一些笔记。 除了这些注释,我还编写了一个服务器组件,允许通过 http 允许自定义 css 以 HTML 格式查看这些注释,并且在将这些注释更改为本地存储库时,我还提交了这些注释。 1/2。 基本 只是...

    Oracle字符串怎样连接单引号

    Oracle字符串如何连接单引号 写了个存储过程,需要在字符串变量前后加单引号。貌似简单的事情折腾了我一下午,好在天无绝人之路。终于被我弄明白甲骨文的变态规则。  Oracle字符串连接单引号:  1.首尾单引号为...

    SqlServer存储过程实现及拼接sql的注意点

    由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面。 这里就出现了一个问题,我花费了好久才弄通!  其实就是很简单的一个SQL语句:  update table1 set field1=value1,field2 ...

    sql2005存储过程的应用

    sqlserver2005中存储过程、触发器、游标的应用,以及简单的字符串拼接技术!

    C#防SQL注入代码的三种方法

     三:尽可能的使用存储过程,安全性能高而且处理速度也快  四:屏蔽SQL,javascript等注入(很是主要的),对于每个文件写是不太可能的。所以要找到对所有文件起作用的办法。我在网上收集了以下3种方法  C#防SQL...

    mysql中find_in_set函数的基本使用方法

    假如字符串str在由多个子链组成的字符串列表strlist中,则返回值的范围在1到N之间。 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。 如果第一个参数是一个常数字符串,而第二个是type

    SQL高级应用(通用分页存储)

    通用SQL 分页存储过程 其中一种是拼接字符串

    Sql Service存储过程分页

    我条件都是拼接字符串感觉很不安全。不晓得博友门有木有什么解决方案  不多说了直接上代码。  GO IF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]='P' AND s.name='SP_PAGE')>0 DROP PROC SP_

    Oracle日期与时间拼接函数以及时间处理函数

    在工作过程中是否有遇到源数据的时间存储为Integer类型的时间格式,如下: 序号 T_TIME_1 1 63272 2 55066 3 55975 4 31394 5 42465 6 56309 7 37965 8 30757 9 37018 10 30092 通过...

    SqlServer使用 case when 解决多条件模糊查询问题

    对此,我们常见的解决方案有两种:一是在程序端拼接SQL字符串,根据是否选择了某个条件,构造相应的SQL字符串;二是在数据库的存储过程中使用动态的SQL语句。其本质也是拼接SQL字符串,不过是从程序端转移到数据库端...

    精通sql结构化查询语句

    讲解SQL语言的应用,提供了近500个曲型应用,读者可以随查随用,深入讲解SQL语言的各种查询语句,详细介绍数据库设计及管理,详细讲解存储过程、解发器和游标等知识,讲解了SQL语言在高级语言中的具体应用。...

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    注意:在执行拼接SQL 语句的时候,的EXEC括号中只允许包含一个字符串变量,但是可以串联多个变量,如果我们直接执行这个SQL语句: --这是错误的调用 EXEC ('SELECT * FROM '+QUOTENAME(@TableName) +'WHERE...

    SQLQuery3.sql

    电商数据库,有七个表,然后再用存储过程做多条件分页!主要就是再拼接字符串,和系统存储过程的使用。还有表与表之间的连接!

    asp.net网站安全从小做起与防范小结

    解决办法:使用存储过程,参数不要用字符串拼接。简单改进办法:使用SqlHelper和OledbHelper 2、跨站脚本漏洞 解决办法:“默认禁止,显式允许”的策略。具体参考:从客户端检测到有潜在危险的Request.Form值,禁止...

    Oracle数据库、SQL

    1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程...

Global site tag (gtag.js) - Google Analytics