Sqlserver根据字段查找表和根据字段值查找表的几个方法
来源:互联网 发布:mac连wifi需要wpa2密码 编辑:程序博客网 时间:2024/06/07 05:43
-------------Sqlserver根据字段名称查找表(多个字段值),例如查找字段名包含 ibatch和cbatch 的表
SELECT *FROM(
SELECT t2.name
FROM syscolumns t1,sysobjects t2
WHERE t1.id=t2.id
and t1.NAME='ibatch'
) m
LEFT JOIN
(
SELECT t2.name
FROM syscolumns t1,sysobjects t2
WHERE t1.id=t2.id
and t1.NAME='cbatch'
) n ON m.name=n.name
-- 在数据库执行,Sqlserver根据字段值查找那些表包含这个值
-- 判断要创建的存储过程名是否存在if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_FindValueInDB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 删除存储过程
drop procedure [dbo].[SP_FindValueInDB]
GO
CREATE PROCEDURE [dbo].[SP_FindValueInDB]
(
@value VARCHAR(1024)
)
AS
BEGIN
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] '010201' ---执行存储过程,传入要找的值 010201
-- 另一个根据字段值查找表的方法
----- 根据字段值查找表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Full_Search]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 删除存储过程
drop procedure [dbo].[Full_Search]
GO
CREATE proc Full_Search(@string varchar(50))
as
begin
declare @tbname varchar(50)
declare tbroy cursor for select name from sysobjects
where xtype= 'u ' --第一个游标遍历所有的表
open tbroy
fetch next from tbroy into @tbname
while @@fetch_status=0
begin
declare @colname varchar(50)
declare colroy cursor for select name from syscolumns
where id=object_id(@tbname) and xtype in (
select xtype from systypes
where name in ( 'varchar ', 'nvarchar ', 'char ', 'nchar ') --数据类型为字符型的字段
) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段
open colroy
fetch next from colroy into @colname
while @@fetch_status=0
begin
declare @sql nvarchar(1000),@j int
select @sql= 'select @i=count(1) from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%'''
exec sp_executesql @sql,N'@i int output',@i=@j output --输出满足条件表的记录数
if @j> 0
BEGIN
select 包含字串的表名=@tbname
--exec( 'select distinct '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''')
END
fetch next from colroy into @colname
end
close colroy
deallocate colroy
fetch next from tbroy into @tbname
end
close tbroy
deallocate tbroy
end
go
-- exec Full_Search '19344' ---执行存储过程,传入要找的值 010201
- Sqlserver根据字段查找表和根据字段值查找表的几个方法
- sqlserver中根据值查找所在的表以及字段
- 在sqlserver中如何根据字段名查找字段所在的表
- 根据字段内容查找表名
- oracle 根据字段名查找表
- 根据字段名查找表名
- mysql 根据字段名查找该字段属于哪个表
- 根据最小字段查找某一表中的记录
- 根据表中的一个字段查找另外一个表的ID更新到这个表的字段上
- oracle中如何根据一个字段名查找出所属的表名
- 根据关键字查找所需要的字段或者某一行
- 查找字段所在的表的方法
- SQLSERVER 中在所有表和字段中查找关键字
- 根据字段值查询其所在的表、字段
- mysql根据多个字段查找和置顶功能的实现
- Sqlserver 查找数据库中含有某字段的所有表
- 关于SqlServer多表根据字段值模糊匹配来连接查询的解决方法
- MySQL根据某一个或者多个字段查找重复数据,并且保留某字段值最大的记录
- Linux(RedHat)学习之路1.0
- h5输入框调起ios端键盘fixed失效
- 安卓EventBus的使用
- mybatis关系映射之一对多和多对一
- Idea、Eclipse 添加Maven依赖
- Sqlserver根据字段查找表和根据字段值查找表的几个方法
- Codeforces 322C Ciel and Robot【思维+模拟】细节很多= =
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
- 下拉多选
- 串口设备数据的接收和处理
- CPP入门基础知识(一)
- 蓝牙模块HC-05的测试
- Linux基础知识之挂载详解(mount,umount及开机自动挂载)
- Go学习笔记(一)