有完成类似如下的任何方式:动态SQL和功能
CREATE FUNCTION GetQtyFromID
(
@oricod varchar(15),
@ccocod varchar(15),
@ocmnum int,
@oinnum int,
@acmnum int,
@acttip char(2),
@unisim varchar(15)
)
AS
RETURNS DECIMAL(18,8)
BEGIN
DECLARE @Result decimal(18,8)
DECLARE @SQLString nvarchar(max);
DECLARE @ParmDefinition nvarchar(max);
--I need to execute a query stored in a cell which returns the calculated qty.
--i.e of AcuQry: select @cant = sum(smt) from table where oricod = @oricod and ...
SELECT @SQLString = AcuQry
FROM OinActUni
WHERE (OriCod = @oricod) AND (ActTipCod = @acttip) AND (UniSim = @unisim) AND (AcuEst > 0)
SET @ParmDefinition = N'
@oricod varchar(15),
@ccocod varchar(15),
@ocmnum int,
@oinnum int,
@acmnum int,
@cant decimal(18,8) output';
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@oricod = @oricod,
@ccocod = @ccocod,
@ocmnum = @ocmnum,
@oinnum = @oinnum,
@acmnum = @acmnum,
@cant = @result OUTPUT;
RETURN @Result
END
这种方法的问题是,它是被禁止的函数来执行sp_excutesql ...
我需要的是做这样的事情:
select id, getQtyFromID(id) as qty
from table
的主要思想是,以执行存储在一个表格单元格的查询,这是因为事物的数量取决于它的设备上。单位可以是几天,也可以是公吨,所以单位之间没有关系,因此需要对每个单位进行具体查询。
为什么您将查询存储在列中,而不是使用存储过程?无法保证运行动态SQL的帐户对表具有选择权限,并且在查询运行之前您不会知道问题。 – 2010-06-08 16:33:25
@OMG。我已经添加了一些信息,请阅读并告诉我您的想法。谢谢。 – Unlimited071 2010-06-08 16:40:18