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的。
‘)’附近有语法错误
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'
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)
而你在转化时却
CAST(Winding as nvarchar(10))
不同的类型,
建议统一使用nvarchar,修改表的定义吧
改成4000,就可以了