我的场景是这样的,
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中的表变量中。有没有其他方法可以完成这项工作?
发布于 2014-08-24 20:04:33
这对我(Sql server 2012)很有效,尽管我并不完全理解您想要实现的目标:
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发布于 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);
https://stackoverflow.com/questions/25470359
复制相似问题