如何解决遍历表中的每个值,并将该值作为参数提供给函数
我需要遍历import numpy as np
import matplotlib.pyplot as plt
import io
from PIL import Image
x = np.arange(100)
y = np.sin(x)
fig,ax = plt.subplots()
ax.plot(x,y)
fig.savefig("test_stack.tif",format="tif",transparent=True)
plt.close(fig)
buf = dict()
for i in range(5):
fig,ax = plt.subplots()
ax.plot(x,y*(i+2))
buf[i] = io.BytesIO()
fig.savefig(buf[i],transparent=True)
buf[i].seek(0)
im=Image.open("test_stack.tif","r")
im.save(f"test_stack_{i}.tif",format="tiff",append_images=[Image.open(buf[i]) for i in buf],save_all=True)
im.close()
plt.close(fig)
[buf[i].close() for i in buf]
中的每个值,并将该值用作#TempTable
的参数
函数MyFunction
仅基于MyFunction
中的ID_col
返回另一列
#TempTable
但是我无法遍历IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL DROP TABLE #TempTable
select 'ID1' as ID_col
into #TempTable
union select all 'ID2'
union select all 'ID3'
DECLARE @PriorID_col varchar(50)
DECLARE @ReturnVal varchar(50) = ''
SELECT TOP 1 PriorID_col = #TempTable.ID_col
-- here I need to loop through each ID_col in #TempTable and supply it as a parameter to "MyFunction"
WHILE MyFunction(#TempTable.ID_col) IS NOT NULL
BEGIN
SET @PriorID_col = MyFunction(@PriorID_col)
END
-- querying ID from real table based on variable @PriorID_col
SELECT TOP 1 @ReturnVal = ID
FROM MyTable
WHERE MyTable.ID = @PriorID_col
中的每个值。
我在这里做什么错了?
解决方法
我认为您的逻辑并不奏效,而您的union all
当然也不行。您将为临时表中的每一行获取一个值,但仅使用这些值之一来获取返回值,并且它们之间似乎没有任何关系。
无论如何,我已经展示了遍历临时表中各行的基本前提。本质上...
- 获得第一行
- 用它做点事
- 删除
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL DROP TABLE #TempTable;
SELECT 'ID1' AS ID_col
INTO #TempTable
UNION ALL SELECT 'ID2'
UNION ALL SELECT 'ID3';
DECLARE @ID_col VARCHAR(50),@PriorID_col VARCHAR(50),@ReturnVal VARCHAR(50) = '';
-- here I need to loop through each ID_col in #TempTable and supply it as a parameter to "MyFunction"
WHILE EXISTS (SELECT 1 FROM #TempTable.ID_col)
BEGIN
SELECT TOP 1 @ID_col = ID_col #TempTable.ID_col;
SET @PriorID_col = dbo.MyFunction(@ID_col)
DELETE FROM #TempTable.ID_col WHERE ID_col = @ID_col
END;
-- querying ID from real table based on variable @PriorID_col
SELECT TOP 1 @ReturnVal = ID
FROM MyTable
WHERE MyTable.ID = @PriorID_col;
,
想知道,SELECT
... WHERE
在这种情况下是否简单?
SELECT 'ID1' AS ID_col
INTO #TempTable
UNION ALL SELECT 'ID2'
UNION ALL SELECT 'ID3';
SELECT *
FROM MyTable
WHERE MyTable.Id IN (SELECT MyFunction(@ID_col) FROM #TempTable)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。