1、首先新建一张最简单的数据库表,id自增长。
2、然后在表中插入重复值。
3、接着新建视图,首先要确定自己的删除规则是什么样的,删除编号id比较大的还是比较小的。
4、然后将视图select语句粘贴到删除语句后面,执行删除语句。
5、最后查看删除后结果,就完成了。
1、当这个数据为数据库中的某一列的列名的时候,我们如何通过该列名获取到表名呢?登录mysql的客户端,并输入sql语句select * from columns where column_name='DEPT_NAME';其中DEPT_NAME为查找的列名。
2、点击上图的运行按钮,执行该命令,可以看到运行结果如下所示,列名为DEPT_NAME的表为department。
可用如下代码实现:
declare @cloumns varchar(40)
declare @tablename varchar(40)
declare @str varchar(40)
declare @counts int
declare @sql nvarchar(2000)
declare MyCursor Cursor For
Select a.name as Columns, b.name as TableName from syscolumns a,sysobjects b,systypes c
where a.id = b.id
and b.type = 'U'
and a.xtype=c.xtype
and c.name like '%char%'
set @str='张三'
Open MyCursor
Fetch next From MyCursor Into @cloumns,@tablename
While(@@Fetch_Status = 0)
Begin
set @sql='select @tmp_counts=count(*) from ' +@tablename+ ' where ' +@cloumns+' = ''' +@str+ ''''
execute sp_executesql @sql,N'@tmp_counts int out',@counts out
if @counts>0
begin
print '表名为:'+@tablename+',字段名为'+@cloumns
end
Fetch next From MyCursor Into @cloumns,@tablename
End
Close MyCursor
Deallocate MyCursor
如本题,是查找库中,包含“张三”的数据的表。
结果如图:
目前没有这种专用工具,鉴于你的表如此之多,也没有好的办法。
导数据出来检测是最笨的办法,工作量非常大。
如果可能建议询问开发系统的公司或者作者。
或者,如果是SQL SERVER的数据库,如果没有加密的话,可以打开跟踪器,看写入值的时候往哪个表哪个字段写值。不过前提是,你知道在系统里的哪一个模块里写那个数值。这或许会简单一点,但是,大部分的数据库管理系统都没有提供这种跟踪器。不过,所有的数据库系统都会写日志,你可以打开日志,查看。不过没有SQL SERVER的跟踪器直观。
有时需要运气,祝你好运!
告诉你个好办法,如果数据量有限,可能的话,你把数据导出成文本格式。
然后用随便一个文本编辑器,查找你要的字串。
找到以后看看周围的SQL,就知道你找的值存在哪个表了。
虽然是土办法,不过最有效了。
但是如果数据量非常大,就写一个小工具遍历表和列去找值吧,我想应该再没别的办法了