代码之家  ›  专栏  ›  技术社区  ›  none

执行从存储过程中选择,例如:从sp_表中选择*

  •  0
  • none  · 技术社区  · 14 年前

    有没有办法简单地选择从sp_表返回的结果?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Stefan Steiger Marco van de Voort    14 年前

    不,没有。

    但是您可以尝试通过查询信息模式来替换sp_表。

    例如:

    sp_tables 'T_Raum'
    

    你可以用这个来代替:

    SELECT 
    TABLE_CATALOG AS TABLE_QUALIFIER, 
    TABLE_SCHEMA AS TABLE_OWNER, 
    TABLE_NAME, 
    CASE TABLE_TYPE
            WHEN 'BASE TABLE' THEN 'TABLE'
            ELSE TABLE_TYPE
    END AS TABLE_TYPE, 
    NULL AS REMARKS 
    
    FROM  INFORMATION_SCHEMA.TABLES
    
    WHERE TABLE_TYPE != 'VIEW'
        AND TABLE_NAME = 'T_Raum'
    

    我不知道sp_表到底做了什么,或者您需要它做什么,但至少在本例中,它似乎做了上面的模式查询。

        2
  •  1
  •   Oded    14 年前

    如果你打电话 sp_tables ,你得到的结果 结果 SELECT 声明。

    在这方面,它与返回结果集的任何存储过程都没有区别。

        3
  •  1
  •   AdaTheDev    14 年前

    如果您的意思是要筛选该存储过程返回的结果集,那么根据要筛选的内容,可以将参数传入该存储过程(例如@table_name参数,它支持通配符)。查看 BOL ref on sp_tables

    或者,您需要将结果插入到临时表中并从中进行选择。

    最后,根据需要,可以直接查询sys表。如果只对表格感兴趣:

    SELECT *
    FROM sys.tables
    WHERE...
    
        4
  •  1
  •   JNK    14 年前

    如果要从每个表中选择,可以使用未记录的 sp_msforeachtable 命令:

    sp_msforeachtable 'SELECT * FROM ?'

    这个 ? 是一个通配符,用于指示当前表名,该命令必须是一个字符串,用单引号括起来,就像在其他动态SQL中一样。