我是数据库和sql-server 2008的新手。我有一个类似于
的程序CREATE PROCEDURE P @myint as int
AS
BEGIN
CREATE TABLE #temp (Quantity smallint, Timing smallint)
INSERT INTO #temp
SELECT
Order.quantity as 'Quantity',
Order.ValidUntil - Order.ValidFrom / X
FROM
Order
WHERE
Order.id = 123
SELECT * FROM #temp
DROP TABLE #temp
END
现在问题出现在第二列的上述select语句中,其中我提到了'X'。对于这个X,我应该在执行另一个返回表的过程之后有一个值,并且我想使用该表的某个列的值。
所以,而不是X我想写类似
的东西create table #tmp (col1 nvarchar(512), col2 smalldatetime, col3 smalldatetime, col4 int, col5 float)
Insert into #tmp EXEC ProcedureHere 6, '20130101', '20131231', 0, 400
select col4 from #tmp
答案 0 :(得分:1)
在您的过程中,您必须将参数与输出属性放在一起,当您将参数定义为OUT / OUTPUT时,该值将在过程执行完成后可用。
--first declare all variables with the same type as table #tmp fields
--remember: It's a better design put the declare block in the top of the procedure
declare @p1 nvarchar(512),
@p2 smalldatetime,
@p3 smalldatetime,
@p4 int,
@p5 float
--create the table
create table #tmp (col1 nvarchar(512), col2 smalldatetime, col3 smalldatetime, col4 int, col5 float)
--call the procedure
EXEC ProcedureHere @p1, @p2, @p3, @p4, @p5
--insert data into temporary table
Insert into #tmp
select @p1, @p2, @p3, @p4, @p5
--read col4
select col4 from #tmp
--or
select @p4
程序DDL:
if another parameters is required, you simply add then in the mark (*):
Create Procedure ProcedureHere(
@p1 nvarchar(512) output,
@p2 smalldatetime output,
@p3 smalldatetime output,
@p4 int output,
@p5 float output,
*) as
begin
.
DoStuff
.
--define @p1 result value
select @p1 = select something from somewhere
--so on for the others parameters
.
end
go