sqlserver查询所有用户创建的表中所有字段包含特定字符的数据

查询所有用户创建的表中所有字段包含特定字符的数据

数据库:sqlserver

方式:存储过程

创建存储过程

USE [DBDate]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


--创建存储过程
CREATE PROCEDURE [dbo].[FindDataWithPatternInColumns]  
    @SearchPattern NVARCHAR(50)  
AS  
BEGIN  
    SET NOCOUNT ON;  
    --定义表变量,存储查询结果
	DECLARE @MyResults TABLE (
		TableName NVARCHAR(256),  
		ColumnName NVARCHAR(256), 
		Id uniqueidentifier,  
		MatchedData NVARCHAR(MAX)  
	);  
  
    DECLARE @tableName NVARCHAR(256)  
    DECLARE @columnName NVARCHAR(256)  
    DECLARE @sql NVARCHAR(MAX)  
    --定义游标循环所有表和字段
    DECLARE column_cursor CURSOR FOR   
        SELECT TABLE_NAME, COLUMN_NAME   
        FROM INFORMATION_SCHEMA.COLUMNS   
        WHERE TABLE_CATALOG = DB_NAME(DB_ID()) AND TABLE_SCHEMA = 'dbo' -- 假设所有表都在dbo架构下  
          AND DATA_TYPE IN ('varchar', 'char', 'nvarchar', 'nchar', 'text', 'ntext') -- 只考虑字符类型字段  
    --打开游标
    OPEN column_cursor  
    FETCH NEXT FROM column_cursor INTO @tableName, @columnName  
    --循环游标
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
        SET @sql = ' SELECT '''+QUOTENAME(@tableName)+''' as TableName, '''+QUOTENAME(@columnName)+''' as ColumnName,id,'+QUOTENAME(@columnName)+' as MatchedData  FROM ' + QUOTENAME(@tableName) +   
                   ' WHERE ' + QUOTENAME(@columnName) + ' LIKE ''%' + REPLACE(@SearchPattern, '%', '\%') + '%'''  
        insert into @MyResults EXEC sp_executesql @sql  
  
        FETCH NEXT FROM column_cursor INTO @tableName, @columnName  
    END  
    --关闭释放游标
    CLOSE column_cursor  
    DEALLOCATE column_cursor  
    --查询返回结果
	select * from @MyResults
END  
GO


使用示例:查询所有表包含“公司”的所有字段

EXEC [dbo].[FindDataWithPatternInColumns] @SearchPattern = N'公司'

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值