当前位置: 首页 > 面试题库 >

SQL遍历所有表

何安宜
2023-03-14
问题内容

我正在运行以下代码,从具有特定列的所有表中提取所有相关的行。外层IF应该检查该迭代表中是否存在该列。如果没有,它应该完成该迭代并移至下一张表。如果表中有该GCRecord列,则应检查该表是否将返回任何记录。如果没有要返回的记录,则应结束该迭代并移至下一个表。如果有记录,则应在SSMS中显示它们。

USE WS_Live

EXECUTE sp_MSforeachtable 
'
    USE WS_Live

    IF EXISTS(  SELECT * 
                FROM sys.columns
                WHERE columns.Object_ID = Object_ID(''?'')
                AND Name = ''GCRecord''
             ) 
    BEGIN
        IF EXISTS (SELECT * FROM ? WHERE GCRecord IS NOT NULL)

        BEGIN
            SELECT * FROM ? WHERE GCRecord IS NOT NULL
        END
    END
'

这似乎可行,因为SSMS仅返回带有有效条目的网格。我不明白的是:为什么我仍然会收到这些错误?

Msg 207, Level 16, State 1, Line 10
Invalid column name 'GCRecord'.
Msg 207, Level 16, State 1, Line 13
Invalid column name 'GCRecord'.

编辑

使用建议后,我有以下内容:

USE WS_Live

EXECUTE sp_MSforeachtable 
'
    USE WS_Live

    IF EXISTS(SELECT * FROM sys.columns WHERE columns.Object_ID = Object_ID(''?'')AND Name = ''GCRecord'')

    BEGIN
    IF EXISTS (SELECT * FROM ? WHERE GCRecord IS NOT NULL)

            BEGIN
               EXEC('' SELECT * FROM ? WHERE GCRecord IS NOT NULL'')
            END
    END
'

哪个返回此错误:

Msg 207, Level 16, State 1, Line 7
Invalid column name 'GCRecord'.

指这条线

IF EXISTS(SELECT * FROM sys.columns WHERE columns.Object_ID = Object_ID(''?'')AND Name = ''GCRecord'')

更新

我尝试EXEC了无效的嵌套语句,但是使用选定的答案,我得到的结果是我所期望的而没有错误。


问题答案:

开始使用内部动态查询来避免内部预编译代码,因为表不包含列’ GCRecord

USE WS_Live
GO

EXECUTE sp_MSforeachtable 
'
    IF EXISTS(  SELECT * 
                FROM sys.columns
                WHERE columns.Object_ID = Object_ID(''?'')
                AND Name = ''GCRecord''
             ) 
    BEGIN

          EXEC(''          
                  IF EXISTS (SELECT * FROM ? WHERE GCRecord IS NOT NULL)
                 BEGIN
                         SELECT * FROM ? WHERE GCRecord IS NOT NULL
                 END
              '')
    END
'


 类似资料:
  • 问题内容: 我们有一个软件不会删除不再需要的条目。为了了解服务器中有多少数据正在浪费,并准备进行大型清理操作,我试图遍历所有表并拉出标记为删除的记录。这就是我正在使用的: 这是我的错误: 消息116,级别16,状态1,行19当未将EXISTS引入子查询时,只能在选择列表中指定一个表达式。 我意识到我的错误可能与选择该行中的两列有关 但是,我不确定如何才能确保选择下一行。 PS仅用于脚本测试。 如何

  • 问题内容: 我不太确定自己是在说这种权利,但请耐心等待。 我想知道是否有可能在SQL(特别是MySQL)中做这样的事情:假设我们有树状数据保存在下表中的数据库中: 因此,除“根”行外,每一行都有一个父级,而叶行除外,每一行都有子级。 是否可以仅使用SQL查找任何给定行的所有后代? 问题答案: 可以仅使用SQL而不是在单个查询中获取所有后代。但是我敢肯定,你知道了。我假设您的意思是您想在单个查询中执

  • 问题内容: 这是我的代码: 这是我此页面的XML: 问题是我只能在LogCat控制台上得到它: 为什么我没有得到对TextViews的引用? 问题答案: 您需要递归遍历视图树。当前,您仅列出根视图的子级。 换句话说,您需要这样的东西:

  • 问题内容: 有没有一种方法可以获取Go语言映射中所有键的列表?元素的数量由给出,但是如果我有类似的地图: 如何遍历所有键? 问题答案: https://play.golang.org/p/JGZ7mN0-U- 要么 语句的Go语言规范指定第一个值是键,第二个变量是值,但不必存在。

  • 问题内容: 我有一个带有多个子SKSpriteNode的SKNode。一个简化的例子: 我想对所有这些孩子采取行动。当我在上执行操作时,没有任何效果。 我不能在父项上使用,因为它的许多子项已经具有我正在使用的名称。 有没有一种方法可以遍历的所有子项,以便对所有子项执行单个操作? 问题答案: 您可以简单地列举: 如有必要,请检查每个孩子是否确实是: 从 Swift 2(Xcode 7)开始, 可以将

  • 问题内容: 我有一个表A,并且有一个主键ID。 现在我要遍历A中的所有行。 我发现类似“针对A中的每个记录”的内容,但这似乎并不是您在MySQL中的处理方式。 我想为每一行获取一个字段并对其进行转换,将其插入到另一个表中,然后更新该行的某些字段。我可以将select部分和insert放入一个语句中,但是我也不知道如何在其中进行更新。所以我想循环。实际上,我不想使用MySQL以外的任何东西。 编辑