首页 > 解决方案 > 在数据库中查找特定数据

问题描述

我有以下查询,可从中搜索数据库中的给定列名。但是,我也希望能够显示该列的第一行,以便查看列中包含哪些数据。

有没有有效的方法来做到这一点?

SELECT      c.name  AS 'ColumnName'
           ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%Insert Data Here%'
ORDER BY    TableName
           ,ColumnName;

标签: sqlsql-server

解决方案


您可以将选择构建到变量中并像下面那样执行它。您可能会遇到问题,具体取决于您的数据类型(例如,我有一列会根据我的搜索值生成此消息

不允许从数据类型 image 到 varchar(max) 的显式转换。

但是,对于普通数据类型,这应该适合您:

DECLARE @searchKey NVARCHAR(100) = 'name' --this is what you're looking for in the column name
    , @selectCommand NVARCHAR(MAX)

SELECT @selectCommand = COALESCE(@selectCommand + ' union all ','') + 'select top 1 '''+ i.COLUMN_NAME+''' AS ColumnName, ''['+ i.TABLE_SCHEMA+'].['+ i.TABLE_NAME+']'' AS TableName, try_convert(varchar(max),'+ i.COLUMN_NAME+') AS SampleData FROM ['+ i.TABLE_SCHEMA+'].['+ i.TABLE_NAME+'] '
FROM INFORMATION_SCHEMA.COLUMNS i 
WHERE i.COLUMN_NAME LIKE N'%'+@searchKey+'%'
EXEC(@selectCommand)

结果看起来像这样,@searchKey 为“名称”:

ColumnName   TableName              SampleData
name         [dbo].[table_1]        person 1
NAME         [dbo].[asffaef]        rose
name         [dbo].[tablefeoe]      ashely
DatabaseName [dbo].[Untitled - 3]   NULL
LoginName    [dbo].[Untitled - 3]   NULL

推荐阅读