sqlserver中在指定数据库的所有表的所有列中搜索给定的值
最近因ERP项目,我们需要知道前台数据导入功能Application操作的导入字段都写入到了后台数据库哪些表的哪些列
比如:我们导入了某个客户的资料,我们知道此客户的姓名是ZhangShan,我们想知道,在我们的业务数据库(eg:NorthWind)中,有哪些数据表的哪些字段设置了此姓名值ZhangShan,通过下面的SQL,我们就可以实现此目的,此处的SQL搜索自网上,在此处做了局部修改。一、搜索数据是String类型
适用于搜索Text,NText,Varchar,Nvarchar,Char,NChar等类型
1、创建存储过程:My_Search_StringInGivenTable
代码如下:
USE [NORTHWIND]
GO
/****** Object: StoredProcedure [dbo].[My_Search_StringInGivenTable] Script Date: 09/25/2011 15:37:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[My_Search_StringInGivenTable]
(@SearchString NVARCHAR(MAX),
@Table_Schema sysname,
@Table_Name sysname)
AS
BEGIN
DECLARE @Columns NVARCHAR(MAX), @Cols NVARCHAR(MAX), @PkColumn NVARCHAR(MAX)
-- Get all character columns
SET @Columns = STUFF((SELECT ', ' + QUOTENAME(Column_Name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('text','ntext','varchar','nvarchar','char','nchar')
AND TABLE_NAME = @Table_Name
ORDER BY COLUMN_NAME
FOR XML PATH('')),1,2,'')
IF @Columns IS NULL -- no character columns
RETURN -1
-- Get columns for select statement - we need to convert all columns to nvarchar(max)
SET @Cols = STUFF((SELECT ', cast(' + QUOTENAME(Column_Name) + ' as nvarchar(max)) as ' + QUOTENAME(Column_Name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('text','ntext','varchar','nvarchar','char','nchar')
AND TABLE_NAME = @Table_Name
ORDER BY COLUMN_NAME
FOR XML PATH('')),1,2,'')
SET @PkColumn = STUFF((SELECT N' + ''|'' + ' + ' cast(' + QUOTENAME(CU.COLUMN_NAME) + ' as nvarchar(max))'
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CU ON TC.TABLE_NAME = CU.TABLE_NAME
AND TC.TABLE_SCHEMA = CU.TABLE_SCHEMA
AND Tc.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
WHERE TC.CONSTRAINT_TYPE ='PRIMARY KEY' AND TC.TABLE_SCHEMA = @Table_Schema AND TC.TABLE_NAME = @Table_Name
ORDER BY CU.COLUMN_NAME
FOR XML PATH('')),1,9,'')
IF @PkColumn IS NULL
SELECT @PkColumn = 'cast(NULL as nvarchar(max))'
-- set select statement using dynamic UNPIVOT
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'select *, ' + QUOTENAME(@Table_Schema,'''') + 'as [Table Schema], ' + QUOTENAME(@Table_Name,'''') + ' as [Table Name]' +
' from
(select '+ @PkColumn + ' as [PK Column], ' + @Cols + ' from ' + QUOTENAME(@Table_Name) +
' )src UNPIVOT ([Column Value] for [Column Name] IN (' + @Columns + ')) unpvt
WHERE [Column Value] LIKE ''%'' + @SearchString + ''%'''
--print @SQL
EXECUTE sp_ExecuteSQL @SQL, N'@SearchString nvarchar(max)', @SearchString
END
2、创建搜索存储过程:My_Search_String_AllTables
此存储过程将遍历指定数据库的所有表,并利用上面创建的存储过程My_Search_StringInGivenTable来取得每个表的搜索结果。
代码如下:
USE [NORTHWIND]
GO
/****** Object: StoredProcedure [dbo].[My_Search_String_AllTables] Script Date: 09/25/2011 15:41:58 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROC [dbo].[My_Search_String_AllTables]
(
@SearchString NVARCHAR(MAX)
)
AS
BEGIN
CREATE TABLE #RESULT ([PK COLUMN] NVARCHAR(MAX), [COLUMN VALUE] NVARCHAR(MAX), [COLUMN Name] sysname,
[TABLE SCHEMA] sysname, [TABLE Name] sysname)
DECLARE @Table_Name sysname, @Table_Schema sysname
DECLARE curAllTables CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT Table_Schema, Table_Name
FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY Table_Schema, Table_Name
OPEN curAllTables
FETCH curAllTables
INTO @Table_Schema, @Table_Name
WHILE (@@FETCH_STATUS = 0) -- Loop through all tables in the database
BEGIN
INSERT #RESULT
EXECUTE My_Search_StringInGivenTable @SearchString, @Table_Schema, @Table_Name
FETCH curAllTables
INTO @Table_Schema, @Table_Name
END -- while
CLOSE curAllTables
DEALLOCATE curAllTables
-- Return results
SELECT * FROM #RESULT ORDER BY [Table Name]
END
使用示例
代码如下:
USE [NORTHWIND]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[My_Search_String_AllTables]
@SearchString = N'WantValue'
SELECT 'Return Value' = @return_value
GO
还有另一个版本,就是直接创建一个存储过程来取得所要结果,但个人觉得前面那个方法更具灵活性
代码如下:
USE [NORTHWIND]
GO
/****** Object: StoredProcedure [dbo].[ZL_SearchAllTables] Script Date: 09/25/2011 15:44:10 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROC [dbo].[ZL_SearchAllTables]
(
@SearchStr nvarchar(100)
)
AS
BEGIN
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END
SELECT ColumnName, ColumnValue FROM #Results
END
[code]
二、搜索数据是Int类型
适用于搜索smallint, tinyint, int, bigint等类型
1、创建存储过程 My_Search_IntInGivenTable
[code]
USE [NORTHWIND]
GO
/****** Object: StoredProcedure [dbo].[My_Search_IntInGivenTable] Script Date: 09/25/2011 15:45:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[My_Search_IntInGivenTable]
(@SearchValue INT,
@Table_Schema sysname,
@Table_Name sysname)
AS
BEGIN
DECLARE @Columns NVARCHAR(MAX) ,
@Cols NVARCHAR(MAX) ,
@PkColumn NVARCHAR(MAX) ,
@SQL NVARCHAR(MAX)
--判断并创建#Result表
IF OBJECT_ID('TempDB..#Result', 'U') IS NOT NULL
DROP TABLE #Result
CREATE TABLE #RESULT
(
[PK COLUMN] NVARCHAR(MAX) ,
[COLUMN VALUE] BIGINT ,
[COLUMN Name] SYSNAME ,
[TABLE SCHEMA] SYSNAME ,
[TABLE Name] SYSNAME
)
--开始搜索给定的表
DECLARE curAllTables CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT Table_Schema ,
Table_Name
FROM INFORMATION_SCHEMA.Tables
WHERE Table_Name =@Table_Name
OPEN curAllTables
WHILE 1 = 1
BEGIN
FETCH curAllTables
INTO @Table_Schema, @Table_Name
IF @@FETCH_STATUS 0 -- Loop through all tables in the database
BREAK
PRINT CHAR(13) + 'Processing ' + QUOTENAME(@Table_Schema) + '.'
+ QUOTENAME(@Table_Name)
-- Get all int columns
SET @Columns = STUFF(( SELECT ', ' + QUOTENAME(Column_Name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE LIKE '%int'
AND TABLE_NAME = @Table_Name
AND table_schema = @Table_Schema
ORDER BY COLUMN_NAME
FOR
XML PATH('')
), 1, 2, '')
IF @Columns IS NULL
BEGIN
PRINT 'No int columns in the ' + QUOTENAME(@Table_Schema)
+ '.' + QUOTENAME(@Table_Name)
CONTINUE
END
-- Get columns for select statement - we need to convert all columns to bigint
SET @Cols = STUFF(( SELECT ', cast(' + QUOTENAME(Column_Name)
+ ' as bigint) as '
+ QUOTENAME(Column_Name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE LIKE '%int'
AND TABLE_NAME = @Table_Name
ORDER BY COLUMN_NAME
FOR
XML PATH('')
), 1, 2, '')
-- Create PK column(s)
SET @PkColumn = STUFF(( SELECT N' + ''|'' + ' + ' cast('
+ QUOTENAME(CU.COLUMN_NAME)
+ ' as nvarchar(max))'
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CU ON TC.TABLE_NAME = CU.TABLE_NAME
AND TC.TABLE_SCHEMA = CU.TABLE_SCHEMA
AND Tc.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND TC.TABLE_SCHEMA = @Table_Schema
AND TC.TABLE_NAME = @Table_Name
ORDER BY CU.COLUMN_NAME
FOR
XML PATH('')
), 1, 9, '')
IF @PkColumn IS NULL
SELECT @PkColumn = 'cast(NULL as nvarchar(max))'
-- set select statement using dynamic UNPIVOT
SET @SQL = 'select *, ' + QUOTENAME(@Table_Schema, '''')
+ 'as [Table Schema], ' + QUOTENAME(@Table_Name, '''')
+ ' as [Table Name]' + ' from
(select ' + @PkColumn + ' as [PK Column], ' + @Cols + ' from '
+ QUOTENAME(@Table_Schema) + '.' + QUOTENAME(@Table_Name)
+ ' )src UNPIVOT ([Column Value] for [Column Name] IN ('
+ @Columns + ')) unpvt
WHERE [Column Value] = @SearchValue'
--print @SQL -- if we get errors, we may want to print generated SQL
INSERT #RESULT
( [PK COLUMN] ,
[COLUMN VALUE] ,
[COLUMN Name] ,
[TABLE SCHEMA] ,
[TABLE Name]
)
EXECUTE sp_ExecuteSQL @SQL, N'@SearchValue int', @SearchValue
PRINT 'Found ' + CAST(@@ROWCOUNT AS VARCHAR(10)) + ' records in '
+ QUOTENAME(@Table_Schema) + '.' + QUOTENAME(@Table_Name)
END
CLOSE curAllTables
DEALLOCATE curAllTables
SELECT *
FROM #RESULT
ORDER BY [TABLE SCHEMA] ,
[TABLE Name]
END
2、创建搜索存储过程My_Search_Int_AllTables,与上面类似,此存储过程将调用 My_Search_IntInGivenTable来实现所遍历的每一个数据表的搜索结果
代码如下:
USE [NORTHWIND]
GO
/****** Object: StoredProcedure [dbo].[My_Search_Int_AllTables] Script Date: 09/25/2011 15:48:29 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROC [dbo].[My_Search_Int_AllTables]
(
@SearchValue INT
)
AS
BEGIN
CREATE TABLE #RESULT ([PK COLUMN] NVARCHAR(MAX), [COLUMN VALUE] NVARCHAR(MAX), [COLUMN Name] sysname,
[TABLE SCHEMA] sysname, [TABLE Name] sysname)
DECLARE @Table_Name sysname, @Table_Schema sysname
DECLARE curAllTables CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT Table_Schema, Table_Name
FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY Table_Schema, Table_Name
OPEN curAllTables
FETCH curAllTables
INTO @Table_Schema, @Table_Name
WHILE (@@FETCH_STATUS = 0) -- Loop through all tables in the database
BEGIN
INSERT #RESULT
EXECUTE My_Search_StringInGivenTable @SearchValue, @Table_Schema, @Table_Name
FETCH curAllTables
INTO @Table_Schema, @Table_Name
END -- while
CLOSE curAllTables
DEALLOCATE curAllTables
-- Return results
SELECT * FROM #RESULT ORDER BY [Table Name]
END
使用示例
代码如下:
USE [NORTHWIND]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[My_Search_Int_AllTables]
@SearchValue = 68
SELECT 'Return Value' = @return_value
GO
Note:
1、你可以根据上面一、二中的第1个存储过程来实现只搜索指定某些数据表的功能。
2、对于其它数据类型如:Date,Real等等均可以此为参照进行修改。
3、此方法对大型数据库会很耗时,所以尽量在小数据库上调试。当需要在大数据库上操作时,尽量避开数据库使用高峰时段并要有耐心。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Windows 11에서 검색 필드를 클릭하면 검색 인터페이스가 자동으로 확장됩니다. 왼쪽에는 최근 프로그램 목록이 표시되고 오른쪽에는 웹 콘텐츠가 표시됩니다. Microsoft는 여기에 뉴스와 인기 콘텐츠를 표시합니다. 오늘의 확인에서는 Bing의 새로운 DALL-E3 이미지 생성 기능, "Bing과 함께 드래곤 채팅" 제안, 드래곤에 대한 추가 정보, 웹 섹션의 주요 뉴스, 게임 추천 및 인기 검색 섹션을 홍보합니다. 전체 항목 목록은 컴퓨터에서의 활동과 별개입니다. 일부 사용자는 뉴스를 볼 수 있는 기능을 높이 평가할 수도 있지만 이 모든 것은 다른 곳에서도 풍부하게 제공됩니다. 다른 사람들은 이를 직간접적으로 판촉이나 광고로 분류할 수도 있습니다. Microsoft는 자체 콘텐츠를 홍보하기 위해 인터페이스를 사용합니다.

Xianyu는 어떻게 사용자를 검색하나요? 소프트웨어 Xianyu에서는 소프트웨어에서 소통하고 싶은 사용자를 직접 찾을 수 있습니다. 그런데 사용자를 검색하는 방법을 모르겠습니다. 검색 후 사용자들 사이에서 확인해보세요. 다음은 에디터가 사용자에게 제공하는 사용자 검색 방법에 대한 소개입니다. 관심이 있으신 분들은 꼭 들러보세요! Xianyu에서 사용자를 검색하는 방법 답변: 검색 후 사용자의 세부 정보를 봅니다. 소개: 1. 소프트웨어를 입력하고 검색 상자를 클릭합니다. 2. 사용자 이름을 입력하고 검색을 클릭하세요. 3. 검색창 아래의 [사용자]를 선택하여 해당 사용자를 찾으세요.

Baidu 고급 검색 사용 방법 Baidu 검색 엔진은 현재 중국에서 가장 일반적으로 사용되는 검색 엔진 중 하나이며, 그 중 하나가 고급 검색입니다. 고급 검색은 사용자가 필요한 정보를 보다 정확하게 검색하고 검색 효율성을 높이는 데 도움이 됩니다. 그렇다면 Baidu 고급 검색을 사용하는 방법은 무엇입니까? 첫 번째 단계는 Baidu 검색 엔진 홈페이지를 여는 것입니다. 먼저 Baidu의 공식 웹사이트인 www.baidu.com을 열어야 합니다. 바이두 검색에 들어가는 입구입니다. 두 번째 단계에서는 고급 검색 버튼을 클릭하세요. 바이두 검색창 오른쪽에

지능이 지배하는 시대에는 사무용 소프트웨어도 대중화되었으며, 유연성으로 인해 대다수의 직장인이 Wps 형식을 채택합니다. 직장에서는 간단한 양식 작성과 텍스트 입력뿐만 아니라 실제 업무를 완료하기 위해 더 많은 운영 기술을 습득해야 합니다. 데이터가 포함된 보고서와 양식을 사용하는 것이 더욱 편리하고 명확하며 정확합니다. 오늘 우리가 당신에게 전하는 교훈은: WPS 테이블이 당신이 찾고 있는 데이터를 찾을 수 없다는 것입니다. 왜 검색 옵션 위치를 확인해야 합니까? 1. 먼저 Excel 테이블을 선택하고 두 번 클릭하여 엽니다. 그런 다음 이 인터페이스에서 모든 셀을 선택합니다. 2. 그런 다음 이 인터페이스의 상단 도구 모음에 있는 "파일"에서 "편집" 옵션을 클릭합니다. 3. 둘째, 이 인터페이스에서 "

모바일 타오바오 앱 소프트웨어는 언제 어디서나 구입할 수 있으며, 모든 제품의 가격표가 명확하여 더욱 편리한 쇼핑을 즐길 수 있습니다. 원하는 대로 자유롭게 검색하고 구매할 수 있습니다. 개인 배송 주소와 연락처를 추가하면 택배사에서 쉽게 연락할 수 있으며, 최신 물류 동향도 실시간으로 확인할 수 있습니다. 사용자가 처음 사용하는 경우 제품을 검색하는 방법을 모르면 검색창에 키워드만 입력하면 모든 제품 결과를 자유롭게 찾을 수 있습니다. 에디터는 모바일 타오바오 사용자가 매장 이름을 검색할 수 있는 자세한 온라인 방법을 제공합니다. 1. 먼저 휴대폰에서 타오바오 앱을 열고,

PHP 함수를 사용하여 데이터를 검색하고 필터링하는 방법은 무엇입니까? PHP를 사용하여 개발하는 과정에서 데이터를 검색하고 필터링해야 하는 경우가 종종 있습니다. PHP는 이러한 작업을 수행하는 데 도움이 되는 다양한 기능과 메서드를 제공합니다. 이 기사에서는 데이터를 효율적으로 검색하고 필터링하는 데 도움이 되는 몇 가지 일반적으로 사용되는 PHP 함수 및 기술을 소개합니다. 문자열 검색 PHP에서 일반적으로 사용되는 문자열 검색 함수는 strpos()와 strstr()입니다. strpos()는 문자열에서 특정 하위 문자열의 위치를 찾는 데 사용됩니다. 존재하는 경우 이를 반환합니다.

Vue 기술 개발에서 데이터 필터링 및 검색 방법 Vue 기술 개발에서 데이터 필터링 및 검색은 매우 일반적인 요구 사항입니다. 합리적인 데이터 필터링 및 검색 기능을 통해 사용자는 필요한 정보를 빠르고 쉽게 찾을 수 있습니다. 이 기사에서는 Vue를 사용하여 데이터 필터링 및 검색 기능을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 데이터 필터링: 데이터 필터링은 특정 조건에 따라 데이터를 필터링하고 조건에 맞는 데이터를 필터링하는 것을 의미합니다. Vue에서는 계산된 속성과 v-for 지시문을 사용할 수 있습니다.

다음 예에서는 확장자를 기반으로 디렉터리의 파일을 인쇄합니다. 예 importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.stream. 스트림; publicclassDemo{ publicstaticvoidmain(String[]args)throwsIOException{ 
