CREATE TABLE [dbo].[Wound](
[WoundID] [int] IDENTITY(1,1) NOT NULL,
[Winding] [varchar](50) NULL,
[Laps] [varchar](50) NULL,
[Wire] [varchar](50) NULL,
[RootNumber] [varchar](50) NULL,
[Pin] [varchar](50) NULL,
[RoutingI] [varchar](200) NULL,
[ELaps] [varchar](200) NULL,
[Skeleton_Pin] [varchar](20) NULL,
[Inductance] [varchar](10) NULL,
[C_Res] [varchar](10) NULL,
[Saturated] [varchar](10) NULL,
[T_Leakage] [varchar](10) NULL,
[TF_ID] [int] NULL,
 CONSTRAINT [PK_Wound] PRIMARY KEY CLUSTERED 
(
[WoundID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]GOdeclare @sql Nvarchar(2000)
set @sql='select TF_ID '
select @sql=@sql+', max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Laps as INT) else 0 end) as ['+CAST(Winding as varchar(10))+',Laps], 
max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Wire as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Wire],
max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Inductance as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Inductance],
max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(C_Res as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',C_Res],
max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Saturated as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Saturated]'from (select DISTINCT  Winding from wound b ) as t
set @sql=@sql+'from wound b,Transformer a   GROUP BY TF_ID'
exec (@sql)
在本机可以执行。但放在另外一台机子上就出错。都是sql2008的。
‘)’附近有语法错误

解决方案 »

  1.   

    sql前面先加上N试试:
    set @sql=N'select TF_ID '
    select @sql=@sql+N', max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Laps as INT) else 0 end) as ['+CAST(Winding as varchar(10))+',Laps], 
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Wire as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Wire],
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Inductance as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Inductance],
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(C_Res as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',C_Res],
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Saturated as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Saturated]'from (select DISTINCT  Winding from wound b ) as t
    set @sql=@sql+N'from wound b,Transformer a   GROUP BY TF_ID'    
      

  2.   

    可以不用Transformer   忘记删了
      

  3.   

    执行这一段试试,应该没问题的:
    declare @sql Nvarchar(2000)
    set @sql=N'select TF_ID '
    select @sql=@sql+N', max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Laps as INT) else 0 end) as ['+CAST(Winding as varchar(10))+',Laps], 
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Wire as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Wire],
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Inductance as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Inductance],
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(C_Res as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',C_Res],
                        max(case when Winding='''+CAST(Winding as nvarchar(10))+''' then cast(Saturated as varchar(10)) else null end) as ['+CAST(Winding as varchar(10))+',Saturated]'from (select DISTINCT  Winding from [Wound] b ) as t
    set @sql=@sql+N'from wound b   GROUP BY TF_ID'   exec (@sql)
      

  4.   

    表定义是[Winding] [varchar](50) NULL,
    而你在转化时却
    CAST(Winding as nvarchar(10))
    不同的类型,
    建议统一使用nvarchar,修改表的定义吧
      

  5.   

    查出,是长度问题。declare @sql Nvarchar(2000)
    改成4000,就可以了