日期:2014-05-19  浏览次数:20772 次

高手帮忙看看这个SQL语句那里错误
declare   @c   char(20)
declare   @c1   char(20)
declare   @i   money
declare   @sql   char(8000)

select   @c=医生,@c1=费用类别,@i=费用   from   aa   where   [id]=1
select   @c,@c1,@i
--以上是正确的.
--后面的错误请高手帮忙修改
sql= 'update   sheet   set   '@c '= '@c '+ '@i '   from   sheet   where   医生= '@c ' '
exec   sql

------解决方案--------------------
sql= 'update sheet set '+@c+ '= '+@c+ '+ '+ltrim(@i)+ ' from sheet where 医生= ' ' '+@c+ ' ' ' '
exec (sql)
------解决方案--------------------
set @sql= 'update sheet set 医生 = ' ' ' + @c + ' ' ',费用 = ' + rtrim(@i) + ' where 医生= ' ' ' + @c + ' ' ' '
exec(@sql)

------解决方案--------------------
靠,你错的地方可多了,update table set field=value where 1=1,怎么又一个from?
------解决方案--------------------
exec (sql)
必须加括号才行呀!
------解决方案--------------------
Create Table A
(费用类别 Nvarchar(20),
费用 Int,
医生姓名 Varchar(20),
id Int)
Insert A Select N '治疗费 ', 100, 'aa ', 1
Union All Select N 'B超费 ', 200, 'bb ', 2
Union All Select N '打针费 ', 300, 'cc ', 3

Create Table B
(医生姓名 Varchar(20),
治疗费 Int,
B超费 Int,
打针费 Int,
床位费 Int)
Insert B Select 'aa ', 100, 100, 100, 100
Union All Select 'bb ', 200, 300, 100, 200
Union All Select 'cc ', 300, 200, 200, 200
GO
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000)
Select @S1 = ' ', @S2 = ' '
Select @S1 = @S1 + ', ' + 费用类别 + N ' = B. ' + 费用类别 + ' + C. ' + 费用类别 , @S2 = @S2 + N ', SUM(Case 费用类别 When N ' ' ' + 费用类别 + N ' ' ' Then 费用 Else 0 End) As ' + 费用类别
From A Group By 费用类别
Select @S1 = 'Update B Set ' + Stuff(@S1, 1, 1, ' ') + N ' From B Inner Join (Select 医生姓名 ' + @S2 + N ' From A Group By 医生姓名) C On B.医生姓名 = C.医生姓名 '
EXEC(@S1)
GO
Select * From B
GO
Drop Table A, B
--Result
/*
医生姓名 治疗费 B超费 打针费 床位费
aa 200 100 100 100
bb 200 500 100 200
cc 300 200 500 200
*/