declare @Row nvarchar(255)
declare @i int
select @i=COUNT(*)from SRV_Row
while(@i>0)
begin
select @Row=name from SRV_Row where SRV_RowID=@i
update SRV_SUB set @Row='yes'
where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s inner join ['WINDOWS 7 32$'] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION=@Row)
select @Row
set @i=@i-1
end在这里,我在update的使用,使用了set与@row变量,我的本意是将列名为@row的列的值改为yes.但是在这里,则变成了每循环一次,将@row的值变成了yes.
求解决方法
declare @i int
select @i=COUNT(*)from SRV_Row
while(@i>0)
begin
select @Row=name from SRV_Row where SRV_RowID=@i
update SRV_SUB set @Row='yes'
where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s inner join ['WINDOWS 7 32$'] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION=@Row)
select @Row
set @i=@i-1
end在这里,我在update的使用,使用了set与@row变量,我的本意是将列名为@row的列的值改为yes.但是在这里,则变成了每循环一次,将@row的值变成了yes.
求解决方法
declare @Row nvarchar(255)
declare @sql text(8000)
declare @i int
select @i=COUNT(*)from SRV_Row
while(@i>0)
begin
select @Row=name from SRV_Row where SRV_RowID=@i
@sql ='update SRV_SUB set @Row='yes'
where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s inner join ['WINDOWS 7 32$'] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION=@Row)'
exec(@sql)
select @Row
set @i=@i-1
end
update tb set 列明 = 'yes' where ....
--设置@Rows = 'yes' 是
set @Rows = 'yes'
update tb set 列名 = @Rows where ....
declare @sql text(8000)
declare @i int
select @i=COUNT(*)from SRV_Row
while(@i>0)
begin
select @Row=name from SRV_Row where SRV_RowID=@i
@sql ='update SRV_SUB set'+ @Row +' ='yes'
where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s inner join ['WINDOWS 7 32$'] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION=@Row)'
exec(@sql)
select @Row
set @i=@i-1
end
declare @sql text(8000)
declare @i int
select @i=COUNT(*)from SRV_Row
while(@i>0)
begin
select @Row=name from SRV_Row where SRV_RowID=@i
@sql ='update SRV_SUB set'+ @Row +' =''yes''
where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s inner join [''WINDOWS 7 32$''] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION=@Row)'
exec(@sql)
select @Row
set @i=@i-1
end
这个问题主要就是字符串跟变量连接的问题,你的把语句用引号引起来,作为字符串去跟变量连接,然后再用exec(@sql)
exec('update SRV_SUB set'+ @Row+'='+quotename('yes','''')+
'where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s
inner join ['+quotename('WINDOWS 7 32$','''')+'] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION='+@Row+')'
quotename('aa') 生成的有效的标识符为 [aa]
quotename('aa','') 生成的有效的标识符为 [aa]
quotename('aa','''') 生成的有效的标识符为 'aa'
'update SRV_SUB set '+ @Row+'='+quotename('yes','''')+
' where '+'
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s
inner join ['+quotename('WINDOWS 7 32$','''')+'] w on s.SRV_PART_NO=w.SRV_PART_NO
where SUB_PH_NUMBER_AND_DESCRIPTION='+@Row+')'
你注意一下有的地方应该加空格,特别是在连接的地方,你把这条语句打印出来看看或者复制过去试试,我刚刚发现附近有地方没加空格
declare @i int
select @i=COUNT(*)from SRV_Row
while(@i>0)
begin
select @Row=name from SRV_Row where SRV_RowID=@i
exec('update SRV_SUB set ['+@Row+']=''yes''
where
SRV_PART_NO in (select distinct w.SRV_PART_NO from SRV_SUB s inner join [''WINDOWS 7 32$''] w on s.SRV_PART_NO=w.SRV_PART_NO where SUB_PH_NUMBER_AND_DESCRIPTION='''+@Row+''')')
set @i=@i-1
end