【发布时间】:2014-06-02 19:41:23
【问题描述】:
我正在使用 xp_dirtree. 将目录中的所有文件名转储到临时表中
CREATE TABLE #TempTable (Subdirectory VARCHAR(512), Depth INT, xFile INT);
INSERT INTO #TempTable (Subdirectory, Depth, xFile)
EXEC xp_dirtree 'D:\log\Day_20140301',0,1
SELECT Subdirectory AS Filename
FROM #TempTable
WHERE subdirectory LIKE '%.log';
SELECT * FROM #TempTable
我使用此表中的每个文件名进行批量插入。
游标好还是while循环好?
目前使用while循环来循环遍历每条记录。
听到很多关于光标的负面消息。接受所有相同的建议。
【问题讨论】:
-
while 循环只是变相的光标......但在这种情况下,我真的看不到任何其他解决方案。无法以基于集合的方式执行此操作 - 您需要逐行执行循环并为每个文件执行批量插入。
-
是的。使用游标会有所不同还是性能相同?该目录每天有大约 300-400 个文件。
-
这两种方法将具有相似的性能特征,在 while 循环上使用光标不会有显着改善 ....
-
您能否完全放弃游标方法,并为您打算收集的所有日志文件创建一个主日志文件?然后从那里插入一个。我认为您可以利用高级语言来执行文件的 IO 组合,然后像您所拥有的那样使用简单的 SQL 语句进行批量插入。甚至可能是 CLR?
-
当人们在性能问题时问为什么会有游标时,这就是答案,在基于集合的解决方案不可用的情况下执行这类任务。
标签: sql sql-server tsql