我有一个带有一个参数的过程,letay @AssetID int
。
我想从另一个表中选择一个列值,然后使用该值作为此过程的参数。
我存储了类似这样的程序,表格已使用@AssetID
参数中的“Where”条件进行过滤:
declare @inspectyear as nvarchar(max), @calc as nvarchar(max), @query as nvarchar(max);
set @inspectyear = STUFF((select distinct ',' + quotename(InspectYear) from ##t2 c
for XML path(''), type).value('.','NVARCHAR(MAX)'),1,1,'')
select @calc = ', ' + quotename(Max(InspectYear)) + ' - ' + quotename(Max(InspectYear)-2)
+ ' as Calc1, ' + quotename(Max(InspectYear)) + ' - ' + quotename(min(InspectYear))
+ ' as Calc2' from #t2;
set @query =
';with data as
(
select inspectyear,
partno, Pos, number
from #t2
unpivot
(
number
for Pos in ([Pos1], [Pos2], [Pos3], [Pos4])
) unpvt
)
select * ' + @calc + ' into ##temp
from data
pivot
(
sum(number)
for inspectyear in (' + @inspectyear + ')
) pvt
order by partno';
exec sp_executesql @query = @query;
select * from ##temp;
drop table ##temp;
所以我需要创建另一个过程,例如:
create procedure spExecmyProc
as
begin
exec spMyProc '@AssetID' -- <-- The parameter took from other table.
go
end
@date
参数取自其他表。
有可能吗?结果应该只有一个结果。
到目前为止,这就是我所做的。它有效,但结果不是“一个结果”。如果@AssetID
不止一个,它会创建多个结果:
declare @AssetID int;
declare cur CURSOR FOR
select distinct AssetID from myTable
open cur
fetch next from cur into @AssetID
while @@FETCH_STATUS = 0
begin
exec mySPName @AssetID
fetch next from cur into @AssetID
end
close cur
DEALLOCATE cur
谢谢。
答案 0 :(得分:0)
我并非100%确定我理解您要实现的目标,但如果您希望能够在AssetId
中的CREATE FUNCTION fnMyFunction (@AssetId INT)
RETURNS INT
AS
BEGIN
DECLARE @return INT
SET @return = @AssetId + 1
RETURN @return
END
的每个值上运行某些代码,每个输入值只返回一个结果,我认为你可以使用标量值函数。让我们假装原始存储过程的目的只是为了简单起见将CREATE TABLE Assets (
AssetId INT
)
INSERT INTO Assets
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 5
UNION
SELECT 7
UNION
SELECT 5
值增加1 - 您的函数可以像这样创建:
SELECT AssetId,
dbo.fnMyFunction(AssetId) AS AssetIdPlus1
FROM Assets
如果你在表格中有一些值:
/------------------------\
| AssetId | AssetIdPlus1 |
|---------+--------------|
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
| 5 | 6 |
\------------------------/
您可以针对您返回的每个值调用您的函数:
AssetId
这为我上面定义的超简单数据集提供了这些结果:
DISTINCT
如果您只想获得表格中SELECT DISTINCT
AssetId,
dbo.fnMyFunction(AssetId)
FROM Assets
的每个唯一值的结果,那么只需返回AssetId = 5
结果:
/------------------------\
| AssetId | AssetIdPlus1 |
|---------+--------------|
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
\------------------------/
将为上面的同一数据集提供这些结果(onclick="window.location='index.html'"
只有一行):
"