我正在尝试创建一个带有游标的函数。我想从游标中获取“数量”值并将其放入临时表中。但是我还没有成功地获取该值并将其放入临时表中。
我在无法完成的地方添加了注释...
以下是我的代码:
alter FUNCTION test(@input VARCHAR(250)) RETURNS Decimal(8, 2) AS BEGIN
DECLARE @rst Decimal(8, 2) SET @rst=0
DECLARE @Temp TABLE (Quantity Decimal(8,2), Price Decimal(8,2))
DECLARE @amount Decimal(8,2)
DECLARE @price Decimal(8,2)
DECLARE CrsOrfLine CURSOR FOR
SELECT AMOUNT FROM LG_001_01_ORFLINE
WHERE LINETYPE = 0
AND ORDFICHEREF = (SELECT TOP 1 LOGICALREF FROM LG_001_01_ORFICHE WHERE GUID='EEB44E72-3717-4F5B-8F7E-6A36EB38EA22')
ORDER BY LINENO_ ASC;
FETCH NEXT FROM CrsOrfLine INTO @amount
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO @Temp (Quantity)
/* HOW AM I SUPPOSED TO ADD IT INTO THE TEMP?????? */
/* I COULDNT FIGURE THIS PART OUT */
FETCH NEXT FROM CrsOrfLine INTO @amount
END /*WHILE*/
CLOSE CrsOrfLine
DEALLOCATE CrsOrfLine
INSERT INTO @Temp (Quantity) VALUES (@Amount)
,但这个函数的性能会非常糟糕。实际上,这似乎是一个X-Y问题。你可能需要描述一下你尝试通过这个函数实现什么目标,然后得到解决方案,而不是寻找如何绕过解决方案中的问题。 - GarethDSELECT INTO...
,它会为你创建表格,或者声明一个表格并使用INSERT INTO...SELECT
语句。 - AndrewFETCH NEXT
,则应使用“FORWARD_ONLY”等。这可以避免冗余内存使用,并显著提高光标的性能。 - GarethD