【问题标题】:How to tell the data types after executing a stored procedure?执行存储过程后如何判断数据类型?
【发布时间】:2010-09-07 04:26:40
【问题描述】:

在 Management Studio 中执行存储过程时,是否有办法返回结果集的数据类型?我正在寻找类似将表名传递给 sp_help 的功能

【问题讨论】:

    标签: sql-server tsql ssms


    【解决方案1】:

    如果您通过 ADO、ADO.NET、ODBC 或类似方式调用存储过程,您确实可以查看类型:生成的记录集具有您正在寻找的类型信息。您真的仅限于 Management Studio 吗?

    【讨论】:

      【解决方案2】:

      最好的办法是将存储过程更改为函数。但这只有在您的环境允许时才有效。

      【讨论】:

        【解决方案3】:

        如果不解析 syscmets 来查看它从哪里查询的内容,就不会想到任何简单的方法。如果您可以编辑 SP 以选择 XML,则可以将 XML_INFO 附加到查询以获取模式。

        【讨论】:

          【解决方案4】:

          实际上,您可以在 SP 中执行此操作:

          EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName')
          
          EXEC ('select * into tmp_TableName from MyTable')
          
          -- Grab the column types from INFORMATION_SCHEMA here
          
          EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName')
          

          虽然,我认为一定有更好的办法。

          【讨论】:

            【解决方案5】:

            这不是最优雅的解决方案,但您可以使用 OPENROWSET 将存储的 proc 结果放入表中,然后使用 sp_help 获取它的描述。

            例如

            select * into tmp_Results 
            from openrowset( 'SQLOLEDB.1'
                           , 'Server=your_server_name;Trusted_Connection=yes;'
                           , 'exec your_stored_proc')
            exec sp_help 'tmp_Results'
            drop table tmp_Results
            

            【讨论】:

              【解决方案6】:

              您始终可以使用具有唯一性的实际表格。这是一个kludge,但它是一个选项。不过,这在存储过程中不起作用。

              if exists (select * from sys.tables where name = 'tmp_TableName')
                  drop table tmp_TableName
              go
              select * into tmp_TableName from MyTable
              
              --do some stuff
              
              go
              if exists (select * from sys.tables where name = 'tmp_TableName')
                  drop table tmp_TableName
              go
              

              【讨论】:

                猜你喜欢
                • 2014-12-23
                • 2016-12-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-08-09
                • 2011-01-04
                • 1970-01-01
                相关资源
                最近更新 更多