declare @sql varchar(255),@field varchar(50)
declare tt cursor for select distinct comshortname from datasaleareaopen tt
fetch tt into @field
set @sql = ' create table aa ( '
while @@fetch_status=0
begin
set @sql = @sql +@field+' varchar(50),'
fetch tt into @field
end
close tt
deallocate tt
set @sql = left(@sql, LEN(@sql)-1)
set @sql = @sql+')'
exec(@sql)//在SQL Server 2k下测试通过!!
declare tt cursor for select distinct comshortname from datasaleareaopen tt
fetch tt into @field
set @sql = ' create table aa ( '
while @@fetch_status=0
begin
set @sql = @sql +@field+' varchar(50),'
fetch tt into @field
end
close tt
deallocate tt
set @sql = left(@sql, LEN(@sql)-1)
set @sql = @sql+')'
exec(@sql)//在SQL Server 2k下测试通过!!
declare tt cursor for select distinct comshortname from datasaleareaopen tt
fetch first tt into @field
set @sql = ' create table aa ( '
while @@fetch_status=0
begin
set @sql = @sql +@field+' varchar(50), '
fetch next tt into @field
end
close tt
deallocate tt
set @sql = @sql+')'
exec(@sql)
declare @sql varchar(255),@field varchar(50)
set @sql = ' create table aa ( '
select @sql=@sql+comshortname+' varchar(50),' from (select distinct comshortname from datasalearea) aset @sql=left(@sql,len(@sql)-1)+')'
exec(@sql)
在sql查询分析器中执行有下列错误:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '01' 附近有语法错误。
CREATE PROCEDURE mobzsale AS
declare @sql varchar(255),@field varchar(50)
declare tt cursor for select distinct comShortName from datasaleareaopen tt
fetch tt into @field
set @sql = ' create table aa ( '
while @@fetch_status=0
begin
set @sql = @sql +@field+' varchar(50),'
fetch tt into @field
end
close tt
deallocate tt
set @sql = left(@sql, LEN(@sql)-1)
set @sql = @sql+')'
exec(@sql)
GO
可他就是提示有错,是不是这个表datasalearea有问题??
set @sql = @sql+')'print @sql --看一下@SQL生成的结果
--exec(@sql)
你的表datasalearea中comShortName字段的值不是以字符开头!
可能你的表中的值是诸如01等。解决方法:
1、新comShortName字段的值改为以字母开头。
2、修改语句set @sql = @sql +'[' +@field+'] varchar(50),'//前后加个[]符号!
//这年头想蹭点分不容易呀~~
2、使用SUBSTRING函数,去掉前两位数字。
修改语句:
set @sql = @sql + SUBSTRING(@field, 3, LEN(@field) - 2) +' varchar(50),'
//上述语句未测试~~~