参考如下问题的解答:
http://www.csdn.net/expert/topic/803/803752.xml?temp=.3938105
http://www.csdn.net/expert/topic/803/803752.xml?temp=.3938105
解决方案 »
- 获取执行executesql得到的数据问题
- 为什么SQL SERVER2000查询分析器无法登录本机的SQL服务器?
- 那位高手发个 Microsoft SQL Server的详细教程
- 从一个表连接根据不同的条件连接到不同表的问题。超级难啊!
- 急,求救,请问各位高手,如何在存储过程中自定义要提取的字段名(80分)
- 一个很少见的问题
- 高手指点,sql server 连接注册问题 在线等待,急!!!
- 不同机器上的SQL SERVER 导致的问题
- 将Access作为后台数据库开发,它的参照完整性还是自动的吗?
- 大力,不好意思我还是不明白,你能说的具体点吗
- 关于查询语句的写法,急,在线
- 能帮我分析一下吗? 在SQL SEVER中,用SELECT语句能够查询出相应记录来,为什么同样的语句在程序中却找不到相同的记录?
--@str:一个表达式,通常是一个用于搜索指定序列的列,即[cmd_result]的[content]列
--@position:查询有特征字符隔开的第几个字符串,如[cmd_result]表中[id]=1,@position=1的是'Value1'
--@StyleStr:特征字符,如'|'
if exists(select * from sysobjects where [id]=object_id('FixStr'))
drop function dbo.FixStr
go
create function FixStr(@str varchar(1000),@position int,@StyleStr varchar(10))
returns varchar(1000)
as
begin
declare @i int,@TmpPosi int
If @position=0
return ('')
if charindex(@StyleStr,@str)=1
set @TmpPosi=1
else
set @TmpPosi=0
set @i=1
While @i<@position
begin
set @TmpPosi=charindex(@StyleStr,@Str,@TmpPosi+1)
if @TmpPosi=0
return ('')
set @i=@i+1
end
return (substring(@str,@TmpPosi+1,case when charindex(@StyleStr,@str,@TmpPosi+1)=0 then len(@str)+1 else charindex(@StyleStr,@str,@TmpPosi+1) end-@TmpPosi-1))
end
go
--构造动态SQL查询[cmd_result]表
declare @i int,@TmpMax int
declare @Tsql varchar(2000)
set @Tsql='select cmd_id,'
select @TmpMax=max(fieldcount) from Table_desp
set @i=1
while @i<=@TmpMax
begin
set @Tsql=@Tsql+'dbo.FixStr(content,'+cast(@i as varchar(5))+',''|'') as Field'+cast(@i as varchar(5))+','
set @i=@i+1
end
set @Tsql=left(@Tsql,len(@Tsql)-1)+' from cmd_result'
exec(@Tsql)
2、sql server里没有数组变量的概念
3、以前有些方法是用临时表的方法解决的,也很麻烦根据你的提醒用一个自定义函数来解决,发现还不错!
其他更简单的方法就不知道了!
if exists(select * from sysobjects where [id]=object_id('FixStr'))
drop function dbo.FixStr
go
create function FixStr(@str varchar(1000),@position int,@StyleStr varchar(10))
returns varchar(1000)
as
begin
declare @i int,@TmpPosi int
If @position=0
return ('')
if charindex(@StyleStr,@str)=1
set @TmpPosi=len(@StyleStr)+1
else
set @TmpPosi=1
set @i=1
While @i<@position
begin
set @TmpPosi=charindex(@StyleStr,@Str,@TmpPosi)+len(@StyleStr)
if @TmpPosi=len(@StyleStr)
return ('')
set @i=@i+1
end
return (substring(@str,@TmpPosi,case when charindex(@StyleStr,@str,@TmpPosi)=0 then len(@str)+1 else charindex(@StyleStr,@str,@TmpPosi) end-@TmpPosi))
end