gpt4 book ai didi

sql - 抑制基于 WHERE 子句的 SELECT 输出

转载 作者:行者123 更新时间:2023-12-02 05:16:04 24 4
gpt4 key购买 nike

我在这里有一个查询,用于在整个数据库中搜索我选择的特定 GUID。现在,它正在做它被编程要做的事情:循环遍历所有列/表组合并输出一个可能包含也可能不包含信息的表。我想将其更改为仅输出包含结果的表格。

代码如下:

DECLARE 
@tab_list NVARCHAR(MAX),
@col_list NVARCHAR(MAX),
@IDquery NVARCHAR(MAX),
@srvName NVARCHAR(MAX),
@getList CURSOR

SET @srvName = 'Server_Name'

SET @getList = CURSOR LOCAL FAST_FORWARD FOR
SELECT [TABLE_NAME]
,[COLUMN_NAME]
FROM [Server_Name].[INFORMATION_SCHEMA].[COLUMNS]
WHERE [COLUMN_NAME] LIKE '%id'
AND [DATA_TYPE] LIKE 'uniqueidentifier'
ORDER BY [TABLE_NAME] ASC

OPEN @getList

FETCH NEXT FROM @getList INTO @tab_list, @col_list

WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT @tab_list + ' -- ' + @col_list

SET @IDquery =
'SELECT *' +
' FROM ' + @srvName + '.dbo.' + @tab_list +
' WHERE ' + @col_list + ' = (''GUID_HERE'')' +
' AND ' + @col_list + ' IS NOT NULL'

--PRINT @IDquery
EXEC (@IDquery)
FETCH NEXT FROM @getList INTO @tab_list, @col_list
END

CLOSE @getList
DEALLOCATE @getList

它现在确实在做它的工作,但效率低得可怕。正如我之前提到的,当它搜索此 GUID 时,它会输出它搜索的任何表,即使是那些没有匹配项的表。我希望它只输出包含匹配项的表,我不在乎如何。老实说,我什至不在乎它返回的是不是一个表和列,它在其中找到匹配项(这意味着我必须手动点击该表)。我只想要更清晰的输出,似乎无法将答案放在一起。

编辑:所以我喜欢临时表提供的 promise ,尽管我遇到了一些障碍。这是我拥有的:

WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT @tab_list + ' -- ' + @col_list

SET @IDquery =
'SELECT * INTO #temporary' +
' FROM ' + @srvName + '.dbo.' + @tab_list +
' WHERE ' + @col_list + ' = (''GUID_HERE'')' +
' AND ' + @col_list + ' IS NOT NULL'

--PRINT @IDquery
EXEC (@IDquery)
FETCH NEXT FROM @getList INTO @tab_list, @col_list
END

IF (@@ROWCOUNT > 0)
SELECT @ FROM #temporary

DROP DATABASE #temporary
CLOSE @getList
DEALLOCATE @getList

我可能对临时表的工作方式有误,但我没有看到此代码的表输出。

最佳答案

不是直接从表中选择,而是将结果插入到临时表中。然后检查 @@ROWCOUNT 以确定 SELECT...INTO 是否找到任何记录,如果是,则从临时表中选择结果:

SET @IDquery = '
SELECT * INTO #Temp
FROM ' + @srvName + '.dbo.' + @tab_list + '
WHERE ' + @col_list + ' = (''GUID_HERE'')
AND ' + @col_list + ' IS NOT NULL

IF (@@ROWCOUNT > 0)
SELECT * FROM #Temp
'

--PRINT @IDquery
EXEC (@IDquery)

FETCH NEXT FROM @getList INTO @tab_list, @col_list

关于sql - 抑制基于 WHERE 子句的 SELECT 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610828/

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