我想知道是否有一种简单的方法来获取存储过程返回的创建表语法。
例如,我们有一个存储过程:
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)
)
答案 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');
。
请记住,与新的元数据功能一样,如果有多个结果集(或者形状可能会根据输入而改变),则所有投注均已关闭。