gpt4 book ai didi

sql - 选择具有指定值的列名称

转载 作者:行者123 更新时间:2023-12-04 22:08:42 25 4
gpt4 key购买 nike

我们收到相当大的文件,我们无法控制其格式,这些文件正在通过 SSIS 批量加载到 SQL Server 表中,稍后再导入到我们的内部结构中。这些文件可以包含 800 多个列,而且列名通常无法立即识别。

因此,我们有一个大表来表示文件的内容,其中包含 800 多个 Varchar 列。

问题是:我知道我要在此数据中寻找哪些具体值,但我不知道包含它的列。并且通过观察数据来找到所述列既不高效也不理想。

我的问题是:是否可以按某个值 N 搜索表并返回具有该值的列名?我会发布一些我试过的代码,但我真的不知道从哪里开始写这个……或者是否有可能。

例如:

A   B   C   D   E   F   G   H   I   J   K   L   M   N   ...
------------------------------------------------------------
'a' 'a' 'a' 'a' 'a' 'b' 'a' 'a' 'a' 'b' 'b' 'a' 'a' 'c' ...

如果我要在这个表中搜索值“b”,我希望得到以下结果:

Columns
---------
F
J
K

这样的事情可以做吗?

最佳答案

此脚本将在所有表和所有字符串列中搜索特定字符串。您可以根据自己的需要进行调整:

DECLARE @tableName sysname
DECLARE @columnName sysname
DECLARE @value varchar(100)
DECLARE @sql varchar(2000)
DECLARE @sqlPreamble varchar(100)

SET @value = 'EDUQ4' -- *** Set this to the value you're searching for *** --

SET @sqlPreamble = 'IF EXISTS (SELECT 1 FROM '

DECLARE theTableCursor CURSOR FAST_FORWARD FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo' AND TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME NOT LIKE '%temp%' AND TABLE_NAME != 'dtproperties' AND TABLE_NAME != 'sysdiagrams'
ORDER BY TABLE_NAME

OPEN theTableCursor
FETCH NEXT FROM theTableCursor INTO @tableName

WHILE @@FETCH_STATUS = 0 -- spin through Table entries
BEGIN
DECLARE theColumnCursor CURSOR FAST_FORWARD FOR
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName AND (DATA_TYPE = 'nvarchar' OR DATA_TYPE = 'varchar')
ORDER BY ORDINAL_POSITION

OPEN theColumnCursor
FETCH NEXT FROM theColumnCursor INTO @columnName

WHILE @@FETCH_STATUS = 0 -- spin through Column entries
BEGIN
SET @sql = @tableName + ' WHERE ' + @columnName + ' LIKE ''' + @value +
''') PRINT ''Value found in Table: ' + @tableName + ', Column: ' + @columnName + ''''
EXEC (@sqlPreamble + @sql)
FETCH NEXT FROM theColumnCursor INTO @columnName
END
CLOSE theColumnCursor
DEALLOCATE theColumnCursor

FETCH NEXT FROM theTableCursor INTO @tableName
END
CLOSE theTableCursor
DEALLOCATE theTableCursor

关于sql - 选择具有指定值的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com