您的当前位置:首页SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法

SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法

2023-11-13 来源:哗拓教育
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、最后查看删除后结果,就完成了。

显示全文