0

我创建了一个已输入 DBName 和输出参数的存储过程。一个标志,指示表和列的描述是否成功下载到临时表中。我尝试将临时表作为输出参数传递并在另一个过程中使用它。我尝试使用 udt table 和 openrowset 但它没有用。谁能帮我解决这个问题。谢谢。

代码 :

declare @vFlagOk tinyint
declare @vDataSet nvarchar(max)

exec dbo.Documenter_setDescriptionFromDB 
    @pDBName = 'Name'
    , @pSQLCMDRunedWithSuccess = @vFLagOK output , @pDataSetDescriptions = @vDataSet output
4

1 回答 1

2

我认为不可能将 Types(tables) 作为输出参数传递,因为它们必须是只读的。但是普通程序是选择程序内部的数据,可以在调用程序时将这些数据插入到表中。您可以将类型(声明为表的类型)传递给过程。这是一个例子:

创建类型:

CREATE TYPE MyType AS TABLE  
    ( Var1 INT, Var2 INT );
GO

创建过程:

CREATE procedure p_myproc 
(
  @x MyType readonly
)
as
BEGIN

  SELECT 
    Var1, Var2
  FROM 
    @x
  UNION ALL
  SELECT
    0,0
END

调用脚本:

DECLARE @outputtype MyType
DECLARE @inputtype MyType
INSERT @inputtype VALUES(1,1)

INSERT @outputtype(Var1, Var2)
EXEC dbo.p_myproc @inputtype

SELECT 
  Var1,
  Var2
FROM
  @outputtype

结果:

Var1 Var2
1    1
0    0
于 2014-06-23T08:37:45.007 回答