CREATE PROCEDURE [dbo].[SP_FindValueInDB]( @value VARCHAR(1024)) ASBEGIN SET NOCOUNT ON; DECLARE @sql VARCHAR(1024) DECLARE @table VARCHAR(64) DECLARE @column VARCHAR(64) CREATE TABLE #t ( tablename VARCHAR(64), columnname VARCHAR(64) ) DECLARE TABLES CURSOR FOR SELECT o.name, c.name FROM syscolumns c INNER JOIN sysobjects o ON c.id = o.id WHERE o.type = ‘U‘ AND c.xtype IN (167, 175, 231, 239) ORDER BY o.name, c.name OPEN TABLES FETCH NEXT FROM TABLES INTO @table, @column WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = ‘IF EXISTS(SELECT NULL FROM [‘ + @table + ‘] ‘ SET @sql = @sql + ‘WHERE RTRIM(LTRIM([‘ + @column + ‘])) LIKE ‘‘%‘ + @value + ‘%‘‘) ‘ SET @sql = @sql + ‘INSERT INTO #t VALUES (‘‘‘ + @table + ‘‘‘, ‘‘‘ SET @sql = @sql + @column + ‘‘‘)‘ EXEC(@sql) FETCH NEXT FROM TABLES INTO @table, @column END CLOSE TABLES DEALLOCATE TABLES SELECT * FROM #t DROP TABLE #t End
只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。
EXEC [SP_FindValueInDB] ‘GetAllCar‘
查询出来的结果如下:
转自:https://blog.csdn.net/zengcong2013/article/details/55264202
SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
标签:begin car get procedure rip varchar null 代码 class
小编还为您整理了以下内容,可能对您也有帮助:
在一个SQL数据库中怎么查出包含某个特定字段的所有数据表信息
1.查询数据库中的所有数据库名:
SELECT Name FROM Master..SysDatabases ORDER BY Name
2.查询某个数据库中所有的表名:
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name
3.查询表结构信息:
1 SELECT (case when a.colorder=1 then d.name else null end) 表名,
2 a.colorder 字段序号,a.name 字段名,
3 (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,
4 (case when (SELECT count(*) FROM sysobjects
5 WHERE (name in (SELECT name FROM sysindexes
6 WHERE (id = a.id) AND (indid in
7 (SELECT indid FROM sysindexkeys
8 WHERE (id = a.id) AND (colid in
9 (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
10 AND (xtype = 'PK'))>0 then '√' else '' end) 主键,b.name 类型,a.length 占用字节数,
11 COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,
12 isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,(case when a.isnullable=1 then '√'else '' end) 允许空,
13 isnull(e.text,'') 默认值,isnull(g.[value], ' ') AS [说明]
14 FROM syscolumns a
15 left join systypes b on a.xtype=b.xusertype
16 inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
17 left join syscomments e on a.cdefault=e.id
18 left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
19 left join sys.extended_properties f on d.id=f.class and f.minor_id=0
20 where b.name is not null
21 --WHERE d.name='要查询的表' --如果只查询指定表,加上此条件
22 order by a.id,a.colorder
如何查询SQL数据库含特定字段的表
如果是在mysql数据库中,可以用到information_schema 数据库。
查询特定字段的表可以用如下语句:
select table_name from information_schema.columns where column_name='特定字段名';
如果再指定数据库 可以在where 子句改为:where column_name='特定字段名' and table_schema='特定数据库名';
如果是在sqlserver数据库中,则用到sysobjects和syscolumns 这两个数据库,如下:
select name from sysobjects where id in(select id from syscolumns where name='特定字段名')
其他数据库。。。我还没学。。
SQLSERVER 如何查询整个数据库中某个特定值所在的表和字段
以前写过类似的,参考一下:
declare @str nvarchar(20)declare @tablename varchar(50)
declare @colname varchar(50)
declare @counts int
declare @sql nvarchar(2000)--以上定义变量
declare cur1 cursor for
select a.name tablename,B.name colname from sys.objects a,syscolumns b where a.object_id=b.id and a.type_desc='USER_TABLE'--定义游标
set @str='CT无袖开胸上衣' --设置要查找的字符
Open cur1 --打开游标
Fetch next From cur1 Into @tablename,@colname
While(@@Fetch_Status = 0) --循环
Begin
set @sql=N'select @counts=COUNT(*) from ' + @tablename + ' where charindex('''+@str+''','+@colname+')>0'
exec sp_executesql @sql,N'@counts int output',@counts output --执行动态sql
if @counts>0 --判断某个表某个字段是否存在特定字符
begin
print @tablename+','+@colname --打印表名及字段名
end
Fetch next From cur1 Into @tablename,@colname
End
Close cur1 --关闭游标
Deallocate cur1 --释放游标
如何通过一个值查找到值所在的SQL数据库表?
1、首先新建一张最简单的数据库表,id自增长。
2、然后在表中插入重复值。
3、接着新建视图,首先要确定自己的删除规则是什么样的,删除编号id比较大的还是比较小的。
4、然后将视图select语句粘贴到删除语句后面,执行删除语句。
5、最后查看删除后结果,就完成了。