1、SQL语句中用"''"表示一个实际的"'"2、"N"是声明Unicode 数据
解决方案 »
- SSRS报表新增列排序问题
- 得到双位的日期
- 数据库插入异常处理
- Sql 中如何计算两日期间的天数
- 文本导数据库:字段内容单引号引住,字段间逗号隔开,怎么用命令将文本导入到数据库?
- 从replace替换看,MS-SQL Server 不如access也不如mysql
- 是系统表坏了吗?
- 用sa登录,告知未与信任SQL Server连接相关联
- 关于存储过程要调用两个数据库中的数据的问题(在线等)
- eclipse连接sql 2008 r2, 用户 'sa' 登录失败
- VB6程序中用ADO 不用ODBC 建立到sql server 的连接?
- 求教一条SQL语句。查询某表中所有的主键、唯一索引以及这些主键、索引所包含的字段。
是单引号,不过是连续的两个谢谢
============
如果是连续的那么 是代表空吗
libin_ftsafe(子陌红尘) 1、SQL语句中用"''"表示一个实际的"'"是2个连续的单引号代表一个 双引号吗
select @s=@s+'+case when ['+name+']=2 then '','+name+''' else '''' end'
from syscolumns where id=object_id(@tbname)
select @s='select @s='+stuff(@s,1,1,'')+' from ['+@tbname+'] set @s=stuff(@s,1,1,'''')'
执行后结果为:
=============
select @s=case when [col1]=2 then ',col1' else '' end+case when [col2]=2 then ',col2' else '' end+case when [col3]=2 then ',col3' else '' end+case when [col4]=2 then ',col4' else '' end from [表] set @s=stuff(@s,1,1,'')
=============这句具体什么意思
exec sp_executesql @s,N'@s nvarchar(4000) out',@re out
所以用stuff(@s,1,1,'') 是把第1个字符替换掉
--这个循环的实质是生成处理语句
select @s=@s+'+case when ['+name+']=2 then '','+name+''' else '''' end'
from syscolumns where id=object_id(@tbname)--生成的处理结果是(加了格式化处理):
+case when [col1]=2 then ',col1' else '' end
+case when [col2]=2 then ',col2' else '' end
+case when [col3]=2 then ',col3' else '' end
+case when [col4]=2 then ',col4' else '' end
--而我们最终要的处理语句是:
select @s
=case when [col1]=2 then ',col1' else '' end
+case when [col2]=2 then ',col2' else '' end
+case when [col3]=2 then ',col3' else '' end
+case when [col4]=2 then ',col4' else '' end
from 表--所以要用下面的语句处理一样(stuff的作用参考SQL联机帮助)
select @s='select @s='+stuff(@s,1,1,'')+' from ['+@tbname+']'--这样将得到正确的处理语句,而执行那个处理语句得到的结果,会变成
,col2,col3
这样的结果,所以要在处理语句最后加上一句
set @s=stuff(@s,1,1,'''')'
==============
zjcxc(邹建)
您冤枉我了
我已经看了联机帮助 都已经查到 由于是E文的 所以看了个大概 由于项目很紧啊 没有时间允许我把帮助看一遍 我也想多学点东西啊这个东西要求今天弄完 我把您给我的放在查询分析器中执行了 但是结果的确为空我真的试了好几次啊!也许我真的好笨啊!
http://www.microsoft.com/downloads/details.aspx?FamilyID=a6f79cb1-a420-445f-8a4b-bd77a7da194b&DisplayLang=zh-cn
create table 表(col1 int,col2 int,col3 int,col4 int)
insert 表 select 1,2,2,1
这个是把代码拷贝到查询分析器中 然后建立的2。建立存储过程create proc p_qry
@tbname sysname, --要查的表名
@re nvarchar(4000) out
as
set nocount on
declare @s nvarchar(4000)
set @s=''
select @s=@s+'+case when ['+name+']=2 then '','+name+''' else '''' end'
from syscolumns where id=object_id(@tbname)
select @s='select @s='+stuff(@s,1,1,'')+' from ['+@tbname+'] set @s=stuff(@s,1,1,'''')'
exec sp_executesql @s,N'@s nvarchar(4000) out',@re out
go拷贝到查询分析器3。把如下语句拷贝到查询分析器declare @re nvarchar(4000)
exec p_qry '表',@re out --上面的调用少了表名
select 结果=@re
go============
结果
NUll
========但是 我试了别的表就不行了 我把表名改为 我们数据库中的表名Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'when'.
结果
---------
col2,col3(所影响的行数为 1 行)
有个
TS字段 是不是影响啊还有个主建
@tbname sysname, --要查的表名
@re nvarchar(4000) out
as
set nocount on
declare @s nvarchar(4000)
set @s=''
select @s=@s+'+case when ['+name+']=2 then '','+name+''' else '''' end'
from syscolumns where id=object_id(@tbname)
select @s='select @s='+stuff(@s,1,1,'')+' from ['+@tbname+'] set @s=stuff(@s,1,1,'''')'
exec sp_executesql @s,N'@s nvarchar(4000) out',@s out --输出为@S
set @re=@s --要将输出@s赋给输出变量@re
go
所以
exec p_qry '表',@re out
传递给存储过程的表名是乱码
from syscolumns
where id=object_id(@tbname)
and name like 'xx%' --加上对字段名的过滤条件
好像不起作用好像和我的字段名有关例如 BAB0336_2_27 中间有下划线
Unclosed quotation before the character string ',BAB0336_2_5_2_8_2_3'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ',BAB0336_2_5_2_8_2_3'.
from syscolumns
where id=object_id(@tbname)
and name like 'xx%' --加上对字段名的过滤条件后,print(@s) 看看,就知道是否字段太多
set @s='as_dfa_dfa_daf'
select [_个数]=len(@s)-len(replace(@s,'_',''))
返回一个字符串的 这样我想在调用时用 :exec p_qry '表' 完成调用可以吗