为存储过程的返回创建表语法

时间:2012-03-06 20:43:15

标签: sql-server sql-server-2008 stored-procedures create-table

我想知道是否有一种简单的方法来获取存储过程返回的创建表语法。

例如,我们有一个存储过程:

CREATE PROCEDURE [dbo].[usp_branches]
AS BEGIN
    select * from branches
END

然后我需要这样的东西

insert into @tempBranches
exec usp_branches

有没有办法可以从存储过程的返回中轻松获取创建表语法?所以对于这个例子我会得到这个

DECLARE @tempBranches TABLE
    (
        BranchID int
        ,BranchName varchar(25)
    )

1 个答案:

答案 0 :(得分:2)

在SQL Server 2012中,是的。有一些新功能可以根据临时SQL字符串或对象名称检索元数据(有关详细信息,请参阅https://sqlblog.org/2010/12/20/sql-server-v-next-denali-metadata-enhancements)。

在早期版本中(您忘了告诉我们哪个版本),有一些不太可靠的解决方法。 e.g。

SELECT * INTO #table FROM OPENROWSET('SQLNCLI', 
    'Server=(local);Trusted Connection=Yes;', 
    'EXEC yourdatabase.dbo.usp_branches;');

为了做到这一点,你首先需要说:

EXEC sp_configure 'show adv', 1;
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'ad hoc dist', 1;
RECONFIGURE WITH OVERRIDE;
GO

现在,您可以根据CREATE TABLE构建tempdb.sys.columns where name LIKE '#table%';语句。或者更安全where [object_id] = OBJECT_ID('tempdb..#table');

请记住,与新的元数据功能一样,如果有多个结果集(或者形状可能会根据输入而改变),则所有投注均已关闭。