sql语句小问题!

kevin87923 2010-11-03 02:29:41

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]

GO

declare @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的。
‘)’附近有语法错误
...全文
77 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevin87923 2010-11-03
  • 打赏
  • 举报
回复
查出,是长度问题。declare @sql Nvarchar(2000)
改成4000,就可以了
abuying 2010-11-03
  • 打赏
  • 举报
回复
表定义是[Winding] [varchar](50) NULL,
而你在转化时却
CAST(Winding as nvarchar(10))
不同的类型,
建议统一使用nvarchar,修改表的定义吧
claro 2010-11-03
  • 打赏
  • 举报
回复
报什么错误? 语句是OK 的。
kevin87923 2010-11-03
  • 打赏
  • 举报
回复
唉, 没找到解决的办法。 结贴吧
「已注销」 2010-11-03
  • 打赏
  • 举报
回复
执行这一段试试,应该没问题的:
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)
kevin87923 2010-11-03
  • 打赏
  • 举报
回复
唉, 我的机子是没问题的。 其他机子就不行。
「已注销」 2010-11-03
  • 打赏
  • 举报
回复
我执行没有问题。
kevin87923 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 claro 的回复:]

把建表语句给全。
[/Quote]
可以不用Transformer 忘记删了
claro 2010-11-03
  • 打赏
  • 举报
回复
把建表语句给全。
claro 2010-11-03
  • 打赏
  • 举报
回复
缺少Transformer 表。
kevin87923 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zsh0809 的回复:]

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]……
[/Quote]

不行,这回是't'附近语法错误
「已注销」 2010-11-03
  • 打赏
  • 举报
回复
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'

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧