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

各位大神帮我看看这个程序问题
小弟刚学SQL数据库方面的知识,今天在调试一个程序,老是出现错误,请各位大神给小弟指出错误
declare @s varchar(max) 
set @s = 'create table test2(a varchar(20)' 
select @s = @s + ',' + convert(varchar,ID) + ' varchar(100)' from BOOK.DBO.BOOKS 
set @s = @s + ')'
exec(@s) 
print @s
--借助中间表实现行列转换 
declare @name varchar(8000) 

declare t_cursor cursor for  
select name from book..syscolumns  
where id=object_id('BOOK.DBO.BOOKS') and colid > 1 order by colid 

open t_cursor 

fetch next from t_cursor into @name 

while @@fetch_status = 0 
begin 
  exec('select ' + @name + ' as t into test3 from BOOK.DBO.BOOKS') 
  set @s='insert into test2 select ''' + @name + '''' 
  select @s = @s + ',''' + rtrim(t) + '''' from test3 
  exec(@s) 
  exec('drop table test3') 
  fetch next from t_cursor into @name 
end 
close t_cursor 
deallocate t_cursor 

--查看行列互换处理结果 
--select * from BOOK.DBO.BOOKS
select * from test2
错误:消息 102,级别 15,状态 1,第 1 行
'123' 附近有语法错误。
create table test2(a varchar(20),123 varchar(100),124 varchar(100),125 varchar(100),126 varchar(100),127 varchar(100))

(5 行受影响)
消息 208,级别 16,状态 1,第 1 行
对象名 'test2' 无效。
查了很久不明白怎么回事,求各位大神给小弟指导指导

------解决方案--------------------
SQL code
declare @s varchar(max)  
set @s = 'create table test2(a varchar(20)'  
select @s =  @s + ', ['+ convert(varchar,ID) + '] varchar(100)' from BOOK.DBO.BOOKS  
set @s = @s + ')'
exec(@s)  
print @s