日期:2014-05-18  浏览次数:20422 次

存储过程:表名为变量,拼串不成功.求助!!!
存储过程部份功能:删除一个表中的重复记录,有ID字段.代码段如下:
declare   @表名   varchar(50)   --该表有字段:mobile,id(标示字段)
declare   @SQLstr   varchar(3000)
SET   @SQLstr=   'delete   from   '+   @表名+ '   where   id   in   (select   max(id)   from   '+   @表名+ 'group   by   mobile   having   count(*)> 1) '
while   exists(select   mobile,count(*)   from   @表名   group   by   mobile   having   count(*)> 1   )   --这里的表名怎么处理呢???
  begin
          EXEC(@SQLCmd3)
  end

这个exists怎么处理呢?现在用的是while   @@rowcount   >   0   来应急的.

------解决方案--------------------
我也遇到这样的问题,也是用@@rowcount处理的
select mobile,count(*) from @表名 group by mobile having count(*)> 1
这个还是拼接SQL串
然后execute 判断@@rowcount
------解决方案--------------------
查询语句中字段或表名是变量的话只能用动态查询(exec),
因为exists不能内嵌exec语句,所以也只能用@@rowcount处理了
------解决方案--------------------
--这个更好一些
declare @表名 varchar(50)
declare @SQLstr varchar(3000)
SET @SQLstr= 'delete from '+ @表名+ ' where id in (select max(id) from '+ @表名+ 'group by mobile having count(*)> 1) '
declare @condition varchar(1000)
set @condition= 'select mobile,count(*) from ' + @表名 + ' group by mobile having count(*)> 1 '
exec(@condition)
while @@rowcount> 0
begin
set nocount on
EXEC(@SQLstr)
set nocount off
exec(@condition)
end