【特性】select语句中使用字符串链接获取字段值失败
坑1
在一个多行的表中,想把其中的一个字段值拿出来,组成一个字符串供后面使用。
按照以往,自己就如以下这么写了:
declare @sql varchar(8000)
set @sql='insert into XXX values('
select @sql=@sql+''','''+ field from YY
然后没有得到想要的所有行的字符串,第一行之后就没有了。
排查问题:
自己仔细查看了数据,并打印出来,发现这个字段有换行。
于是自己又用replace把字段field的换行符,结果依然如此,也是,有的行里面就没有换行符,自己也做了验证,那么肯定不是这个原因了。
自己猜测是字段类型的原因,查了field的字段类型:NVarChar(max),很厉害,于是自己在写的时候就转换了一次,使用了cast,选择了一个合适的字符串长度,改造之后sql如下:
declare @sql varchar(8000)
set @sql='insert into XXX values('
select @sql=@sql+''','''+ cast(field as nvarchar(1000)) from YY
搞定!字符串完整的获取了所有的行的字段值。
坑2
搞定中间数据完了,之后呢,自己需要复制查询结果到excel,不能有换行符,有换行符,excel就换行不讲道理的换行。
于是,就在前面的基础上,给field字段加上replace处理,结果又只能获取第一行的数据了。
我试了两种方式,在转换之前和转换之后都是不行的。
--转换之前
cast(replace(replace(field,char(10),''),char(13),'') as nvarchar(1000))
--转换之后
replace(replace(cast(field as nvarchar(1000)),char(10),''),char(13),'')
这个坑,自己先搁着,毕竟convert还没有用呢,自己草草的把这个数据插入临时表的时候自己用了replace去掉了,然后再字符串链接的时候,从临时表中拿数据,就解决了。
【特性】select语句中使用字符串链接获取字段值失败的更多相关文章
- 关于Mysql select语句中拼接字符串的记录
在mysql的SELECT语句中拼接两列(或多列)的字符串显示: mysql> select concat(dname,loc) from dept; 以上语句便把dept表的dname,loc ...
- SQL SERVER SELECT语句中加锁选项的详细说明 [转]
SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了S ...
- select语句中会影响查询效率的因素
1.没有创建索引,或者没有正确使用索引;2.存在死锁的情况,从而导致select语句挂起; 3.返回不必要的列,如很多人喜欢在程序中使用select * from 这样会查询表或视图中的所有字段,如果 ...
- SQL SERVER SELECT语句中加锁选项的详细说明
共享锁(读锁)和排他锁(写锁) 共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句. 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能 ...
- 【MYSQL】update/delete/select语句中的子查询
update或delete语句里含有子查询时,子查询里的表不能在update或是delete语句中,如含有运行时会报错:但select语句里含有子查询时,子查询里的表可以在select语句中. 如:把 ...
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- GO学习-(36) Go语言在select语句中实现优先级
Go语言在select语句中实现优先级 Go语言在select语句中实现优先级 select语句介绍 Go 语言中的 select语句用于监控并选择一组case语句执行相应的代码.它看起来类似于swi ...
- [讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)
图 1 UNION 中若有重复的行,会被移除,只留下一个 1.简介 EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值. 2.区别 EXCEPT运算符返回 ...
- SQL语句中count(1)count(*)count(字段)用法的区别
SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和cou ...
随机推荐
- Linux的ls命令在Windows中的应用
Linux的ls命令在Windows中的应用 注:ls是Linux中的命令.其作用是列出当前目录下的文件与文件夹.效果等同于Wndows中的dir指令. 如下图 下面是详细步骤 步骤一.在桌面新建一个 ...
- Oracle_复杂查询综合
Oracle_复杂查询综合 -- 1.列出所有员工的年工资,按年薪从低到高排序. select,) income from emp order by income; -- 2.列出薪金比" ...
- dede织梦栏目页和文章页中获取当前栏目名称方法
一般情况下,在dede织梦系统中列表页.栏目页和文章页中获取当前所在栏目名称只需要代码:{dede:type}[field:typename]{/dede:type}即可,不需要定义ID,默认的就是当 ...
- linux 下 tomcat 安装
下载 根据已安装的jdk版本选择合适的版本,否则不兼容 https://tomcat.apache.org/whichversion.html 选择合适的压缩包 源码 二进制:已针对固定的操作系统和机 ...
- 对[UIApplication sharedApplication]理解
[ sharedApplication]返回UIApplication * application = nil; +(UIApplication*) shareApplication{ if(appl ...
- scss 初学笔记 一 变量声明 默认的样式 嵌套
$width: 300px !default; $: 变量声明符号; width: 变量名称; 300px: 赋予变量的值; !default 代表默认样式 !defau ...
- 远程服务调用(RMI)
模块概念的引入,是本框架的一大优势,而跨JVM的远程服务调用则是另一个最有价值的功能. <本地服务调用>一文中我们讲解了跨模块间的服务调用可以是这样的: ServiceHelper.inv ...
- 理解JS中的call、apply、bind方法(*****************************************************************)
在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...
- 解决Android中,禁止ScrollView内的控件改变之后自动滚动
<ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" ...
- TP手册学习第三天
命令行先在cmd进入项目目录,再执行命令 生成index模块的Blog控制器类库文件:php think make:controller index/Blog 如果仅仅生成空的控制器则可以使用:php ...