如何为存储过程列数据类型自动生成代码 - SQL 服务器
How to Auto Generate Code for Stored Procedure Column Data Types - SQL Server
我想要的最终结果是能够从存储过程中简单地 SELECT。我在网上搜索过,不幸的是网上说这不能完成,你首先需要创建一个 Temp Table 来存储数据。我的问题是您必须先在 Temp Table 中定义列,然后再执行存储过程。这只是耗时的。我只是想从存储过程中获取数据并将其粘贴到 Temp Table 中。
从编码的角度来看,FASTEST实现此目标的途径是什么?简而言之,首先必须从存储过程中查找返回的字段,然后将它们全部写出,这很耗时。
Is there some sort of tool that can just build the CREATE Table Statement based on the Stored Procedure? See screenshot for clarification.
我处理的大多数存储过程都有 50 多个字段。我不希望手动定义这些字段中的每一个。
这很好 SO Post 让我走到这一步,但不是我所希望的。这仍然需要太多时间。 SQL 有经验的服务器人员在做什么?我最近才从 Oracle 跳转到 SQL Server,据我所知,Temp Tables 在 SQL Server 中很重要。
您有多种选择来简化您的任务。但是,这些不会是全自动的。请注意,如果过程代码中存在动态 sql,这些将不起作用。您或许可以格式化函数的结果以提高自动化程度,让您可以轻松地进行复制和粘贴。
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('report.MyStoredProcedureWithAnyColumns'), 0) ;
SELECT * FROM sys.dm_exec_describe_first_result_set(N'EXEC report.MyStoredProcedureWithAnyColumns', null, 0) ;
EXEC sp_describe_first_result_set @tsql = N'EXEC report.MyStoredProcedureWithAnyColumns';
GO
如果你不介意##temp table
和一些动态SQL
注意: 正如 Luis Cazares 正确指出的那样...##temp 存在由于并发问题而发生冲突的风险
例子
Declare @SQL varchar(max) = 'Exec [dbo].[prc-App-Lottery-Search] ''8117'''
Declare @temp varchar(500) = '##myTempTable'
Set @SQL = '
If Object_ID(''tempdb..'+@temp+''') Is Not NULL Drop Table '+@temp+';
Create Table '+@temp+' ('+stuff((Select concat(',',quotename(Name),' ',system_type_name)
From sys.dm_exec_describe_first_result_set(@SQL,null,null ) A
Order By column_ordinal
For XML Path ('')),1,1,'') +')
Insert '+@temp+' '+@SQL+'
'
Exec(@SQL)
Select * from ##myTempTable
我想要的最终结果是能够从存储过程中简单地 SELECT。我在网上搜索过,不幸的是网上说这不能完成,你首先需要创建一个 Temp Table 来存储数据。我的问题是您必须先在 Temp Table 中定义列,然后再执行存储过程。这只是耗时的。我只是想从存储过程中获取数据并将其粘贴到 Temp Table 中。
从编码的角度来看,FASTEST实现此目标的途径是什么?简而言之,首先必须从存储过程中查找返回的字段,然后将它们全部写出,这很耗时。
Is there some sort of tool that can just build the CREATE Table Statement based on the Stored Procedure? See screenshot for clarification.
我处理的大多数存储过程都有 50 多个字段。我不希望手动定义这些字段中的每一个。
这很好 SO Post 让我走到这一步,但不是我所希望的。这仍然需要太多时间。 SQL 有经验的服务器人员在做什么?我最近才从 Oracle 跳转到 SQL Server,据我所知,Temp Tables 在 SQL Server 中很重要。
您有多种选择来简化您的任务。但是,这些不会是全自动的。请注意,如果过程代码中存在动态 sql,这些将不起作用。您或许可以格式化函数的结果以提高自动化程度,让您可以轻松地进行复制和粘贴。
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('report.MyStoredProcedureWithAnyColumns'), 0) ;
SELECT * FROM sys.dm_exec_describe_first_result_set(N'EXEC report.MyStoredProcedureWithAnyColumns', null, 0) ;
EXEC sp_describe_first_result_set @tsql = N'EXEC report.MyStoredProcedureWithAnyColumns';
GO
如果你不介意##temp table
和一些动态SQL
注意: 正如 Luis Cazares 正确指出的那样...##temp 存在由于并发问题而发生冲突的风险
例子
Declare @SQL varchar(max) = 'Exec [dbo].[prc-App-Lottery-Search] ''8117'''
Declare @temp varchar(500) = '##myTempTable'
Set @SQL = '
If Object_ID(''tempdb..'+@temp+''') Is Not NULL Drop Table '+@temp+';
Create Table '+@temp+' ('+stuff((Select concat(',',quotename(Name),' ',system_type_name)
From sys.dm_exec_describe_first_result_set(@SQL,null,null ) A
Order By column_ordinal
For XML Path ('')),1,1,'') +')
Insert '+@temp+' '+@SQL+'
'
Exec(@SQL)
Select * from ##myTempTable