Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在不使用存储过程的情况下在所有表中查找字符串_Sql_Sql Server - Fatal编程技术网

Sql 如何在不使用存储过程的情况下在所有表中查找字符串

Sql 如何在不使用存储过程的情况下在所有表中查找字符串,sql,sql-server,Sql,Sql Server,有时,我想在所有表中搜索一个字符串。但是我发现Stackoverflow的所有答案都是使用存储过程来实现的。这很不方便,因为我不想在我的sql server中创建存储过程,我只想看看这个字符串在数据库中的位置。因此,我提供以下解决方案来帮助任何需要它的人 DECLARE @SQL VARCHAR(MAX) DECLARE @SearchString VARCHAR(100) SET @SQL='' -- ------------------------------------------

有时,我想在所有表中搜索一个字符串。但是我发现Stackoverflow的所有答案都是使用存储过程来实现的。这很不方便,因为我不想在我的sql server中创建存储过程,我只想看看这个字符串在数据库中的位置。因此,我提供以下解决方案来帮助任何需要它的人

DECLARE @SQL VARCHAR(MAX) 
DECLARE @SearchString VARCHAR(100) 
SET @SQL='' 

-- ------------------------------------------ 
-- Enter the string to be searched for here : 
-- 
SET @SearchString='Foo' 
-- ------------------------------------------ 

SELECT   @SQL = @SQL + 'SELECT CONVERT(VARCHAR(MAX),COUNT(*)) + '' matches in column ''+'''
         + C.name + '''+'' on table '' + ''' + SC.name + '.' + T.name + 
         ''' [Matches for '''+@SearchString+''':] FROM ' + 
         QUOTENAME(SC.name) + '.' + QUOTENAME(T.name) + ' WHERE ' + QUOTENAME(C.name) + 
         ' LIKE ''%' + @SearchString + 
         '%'' HAVING COUNT(*)>0 UNION ALL ' +CHAR(13) + CHAR(10) 
FROM     sys.columns C 
JOIN     sys.tables T 
ON       C.object_id=T.object_id 
JOIN     sys.schemas SC 
ON       SC.schema_id=T.schema_id 
JOIN     sys.types ST 
ON       C.user_type_id=ST.user_type_id 
JOIN     sys.types SYST 
ON       ST.system_type_id=SYST.user_type_id 
AND      ST.system_type_id=SYST.system_type_id 
WHERE    SYST.name IN ('varchar','nvarchar','text','ntext','char','nchar') 
ORDER BY T.name, C.name 

-- Strip off the last UNION ALL 
IF LEN(@SQL)>12 
  SELECT @SQL=LEFT(@SQL,LEN(@SQL)- 12) 

EXEC(@SQL) 

--PRINT @SQL
如何使用它: 只需将要搜索的字符串与@SearchString的“Foo”重新关联即可。那你就可以走了

如果这对你有帮助,请投票表决这个问题和答案,让更多的开发者看到它


要归功于此

似乎只需删除
CREATE
并用DECLARE替换参数声明,就可以将存储过程转换为特殊脚本。请注意,此聚合字符串连接方法可能会产生意外的结果。最好对XML使用
,或者在Azure SQL数据库和SQL Server 2017中使用
STRING\u AGG
“似乎只需删除CREATE并用DECLARE替换参数声明,就可以将存储过程转换为临时脚本”您是对的,我只想提供此解决方案,因此,开发人员不需要再次转换它。这将节省开发人员的时间。