Mar*_*c B 20
SELECT ...
FROM yourtable
WHERE 'val' IN (field1, field2, field3, field4, ...)
Run Code Online (Sandbox Code Playgroud)
如果你正在寻找确切的全场比赛.如果你正在寻找子串匹配,你将不得不走很远的路:
WHERE field1 LIKE '%val%' or field2 LIKE '%val%' etc....
Run Code Online (Sandbox Code Playgroud)
小智 10
我不能相信,但我发现了这个,而且效果很好。如果需要,您可以将其他数据类型添加到 WHERE 子句以包含其他类型,也可以将架构名称添加到 JOIN(下面注释)以限制您的搜索。
DECLARE @SQL VARCHAR(MAX)
DECLARE @SearchString VARCHAR(100)
SET @SQL=''
-- ------------------------------------------
-- Enter the string to be searched for here :
SET @SearchString=''
-- ------------------------------------------
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 -- AND SC.name = ''
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
Run Code Online (Sandbox Code Playgroud)
参考: https: //www.sqlmatters.com/Articles/Searching%20all%20columns%20in%20all%20tables%20in%20a%20database.aspx
我不相信有任何快捷方式,您必须指定要搜索的列列表。我认为,如果您发现自己经常尝试这样做,您可能可以改进 DB 设计。
SELECT *
FROM MyTable
WHERE Col1 LIKE '%foo%' OR
Col2 LIKE '%foo%' OR
Col3 LIKE '%foo%' OR
Col4 LIKE '%foo%' OR
Col5 LIKE '%foo%' OR
Col6 LIKE '%foo%'
Run Code Online (Sandbox Code Playgroud)
您甚至可以通过这种方式进行操作。动态创建查询。
SET NOCOUNT ON;
DECLARE @searchText NVARCHAR(100) = 'Test'
DECLARE @columnName NVARCHAR(100)
DECLARE @tableName NVARCHAR(100) = 'Accounts'
DECLARE @sql NVARCHAR(1000) = 'SELECT * FROM ' + @tableName +' WHERE '
DECLARE columns CURSOR FOR
SELECT sys.columns.name FROM sys.tables
INNER JOIN sys.columns ON sys.columns.object_id = sys.tables.object_id
WHERE sys.tables.name = @tableName
OPEN columns
FETCH NEXT FROM columns
INTO @columnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = @sql + @columnName + ' LIKE ''%' + @searchText + '%'' OR '
FETCH NEXT FROM columns
INTO @columnName
END
CLOSE columns;
DEALLOCATE columns;
SET @sql = LEFT(RTRIM(@sql), LEN(@sql) - 2)
EXEC(@sql)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27720 次 |
最近记录: |