首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程:表名为变量,拼串不成功.

2012-01-12 
存储过程:表名为变量,拼串不成功.求助!!!存储过程部份功能:删除一个表中的重复记录,有ID字段.代码段如下:d

存储过程:表名为变量,拼串不成功.求助!!!
存储过程部份功能:删除一个表中的重复记录,有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

热点排行