日期:2014-05-17  浏览次数:20555 次

求一个动态sql 多条记录合并成一条记录
SQL code

declare @fname nvarchar(20)        --字段名
declare @tbname nvarchar(20)    --表名
declare @dfine nvarchar(100)    --
declare @value nvarchar(20)        --字段值
declare @sql nvarchar(500)        --动态语句
declare @returns nvarchar(500)    --所有记录合并成一个字符串,返回
declare @split nvarchar(2)        --分隔符号


set @fname='gdh_code'
set @tbname='tb_gdh'
set    @value='bjw201200'
set @returns=''
set @split=','

set @dfine=N'@fname nvarchar(20),@tbname nvarchar(20),@value nvarchar(20),@split nvarchar(2),@returns nvarchar(500) output'
set @sql='select @returns=@returns+'+@fname+'+'+''''+@split+''''+' from '+@tbname +' where '+@fname+' like '+'''%'+@value+'%'''
print @sql
EXECUTE sp_executesql @sql,@dfine,@fname,@tbname,@value,@split,@returns output

print @returns



错误提示:
消息 156,级别 15,状态 1,第 1 行
关键字 'select' 附近有语法错误。
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@returns"。

------解决方案--------------------
SQL code
declare @fname nvarchar(20)        --字段名
declare @tbname nvarchar(20)    --表名
declare @dfine nvarchar(100)    --
declare @value nvarchar(20)        --字段值
declare @sql nvarchar(500)        --动态语句
declare @returns nvarchar(500)    --所有记录合并成一个字符串,返回
declare @split nvarchar(2)        --分隔符号


set @fname='gdh_code'
set @tbname='tb_gdh'
set    @value='bjw201200'
set @returns=''
set @split=','

set @dfine=N'@fname nvarchar(20),@tbname nvarchar(20),@value nvarchar(20),@split nvarchar(2),@returns nvarchar(500) output'
set @sql='select @returns='+@returns+''+@fname+''+''+@split+''+' from '+@tbname +' where '+@fname+' like '+'''%'+@value+'%'''
print @sql
/*
select @returns=gdh_code, from tb_gdh where gdh_code like '%bjw201200%'
*/

------解决方案--------------------
我觉得你这拼接好像都嵌套了两层,你看看别人的拼接哪有那么复杂。
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html