我想查询一个特定的值,让我们在数据库的某个特定表的某个特定列中说“AYX”。我需要获取表和列的列表,基本上具有“AYX”的值。我该怎么办?去吧?有可能吗?我正在使用SQL SERVER 2008
答案 0 :(得分:3)
DECLARE @string NVARCHAR(32) = N'AYX';
CREATE TABLE #results
(
[column] NVARCHAR(768),
[value] NVARCHAR(MAX)
);
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'SELECT '''
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ '.' + QUOTENAME(name) + ''', ' + QUOTENAME(name) + ' FROM '
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ ' WHERE ' + QUOTENAME(name) + ' LIKE ''%' + @string + '%'';
'
FROM sys.columns
WHERE system_type_id IN (35, 99, 167, 175, 231, 239)
AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0;
INSERT #results EXEC sp_executesql @sql;
SELECT [column],[value] FROM #results;
DROP TABLE #results;
答案 1 :(得分:1)
我只是想指出,有一个免费工具SSMS Tools Pack
可以搜索所有表/视图中的数据。
答案 2 :(得分:0)
您需要使用动态/代码生成的查询。
查看SELECT * FROM INFORMATION_SCHEMA.COLUMNS
以获取数据库中的列列表。
在该表/视图上使用WHERE子句限制为适当的数据类型。
代码生成执行搜索的查询:SELECT '{TABLE_NAME}' AS TABLE_NAME, '{COLUMN_NAME}' AS COLUMN_NAME, COUNT(*) AS ROW_COUNT FROM {TABLE_NAME} WHERE {COLUMN_NAME} LIKE '%{SEARCH}%'
UNION ALL
生成的查询在一起(将WHERE ROW_COUNT <> 0
添加到外部查询中)