首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将表变量从一个存储过程传递到另一个存储过程

如何将表变量从一个存储过程传递到另一个存储过程
EN

Stack Overflow用户
提问于 2014-08-24 17:36:05
回答 2查看 5K关注 0票数 2

我的场景是这样的,

代码语言:javascript
复制
CREATE PROCEDURE SP_1
AS 
BEGIN
    INSERT INTO #tmpTable(ID, Value)
    VALUES(1, 1), (2, 2)
END
GO

CREATE PROCEDURE SP_2
AS
BEGIN
    CREATE TABLE #tmpTable(ID INT, Value INT)
    EXEC SP_1

    SELECT * FROM #tmpTable

    DROP TABLE #tmpTable
END
GO

EXEC SP_2
GO

DROP PROCEDURE SP_1
DROP PROCEDURE SP_2

我想用一个TABLE VARIABLE (@表)替换这个#表。

我试图将表变量作为参数传递给SP_1,但我应该将表变量作为只读参数传递。因为它是只读的,所以我不能插入到SP_1中的表变量中。有没有其他方法可以完成这项工作?

EN

回答 2

Stack Overflow用户

发布于 2014-08-24 20:04:33

这对我(Sql server 2012)很有效,尽管我并不完全理解您想要实现的目标:

代码语言:javascript
复制
CREATE PROCEDURE SP_1
AS 
BEGIN

    Create table #tmpTable (ID INT, Value INT)

    INSERT INTO #tmpTable(ID, Value)
    VALUES(1, 1), (2, 2)

    Select ID,Value from #tmpTable
END
GO

CREATE PROCEDURE SP_2
AS
BEGIN
    Declare @tmpTable table (ID INT, Value INT)

    Insert into @tmpTable
    EXEC SP_1

    SELECT * FROM @tmpTable


END
GO

EXEC SP_2
GO

DROP PROCEDURE SP_1
DROP PROCEDURE SP_2
票数 0
EN

Stack Overflow用户

发布于 2014-08-26 04:16:06

我更喜欢以xml的形式传递数据。对我来说,使用它更容易。您可以构建与下面的代码类似的记录集,并在过程之间传递xml参数,然后按如下所示进行解析。

Declare @record_list xml = (select*

   from   sys.objects

查找xml记录路径(N‘’record‘),根(N’‘record_list’);

select @record_list;

select t.c.value(N'(./schema_id/text())1',*N‘’sysname‘)   as schema_id

在文本名称中, t.c.value(N'(./name/text())1',N‘’sysname‘)将作为其名称。

 t.c.value(N'(./object_id/text())1',N‘’sysname‘)(n’(./object_id/ t.c.value())1‘,n’‘sysname’) as object_id

From   @record_list.nodes(N‘/record_list/record’)表示为t(C);

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25470359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档