如何为每一行执行sql或query

时间:2014-03-07 02:21:23

标签: sql sql-server sql-server-2008

我想创建一个SQL Server 2008脚本,一次性恢复文件夹中的多个备份文件。该脚本是针对一个文件制作的。我想在循环中执行此脚本并加载该目录中的所有文件。我该如何以简单的方式做到这一点。

这是在文件夹中获取文件名的代码 -

EXEC xp_dirtree N'C:\', 10, 1

这就是我的备份sql的样子 -

DECLARE some variables
DECLARE @sql varchar(max)
SET the variables
SET @sql = dynamic sql based on above variables.
exec sp_executesql @sql

如何制作一个简单的循环来运行我的代码?我应该将我的代码转换为函数还是SP?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以创建临时表并将文件列表存储在那里:

CREATE TABLE #FILES(
     Name varchar(200)
,    depth numeric
,    IsFile numeric
)

并插入:

INSERT INTO #FILES 
   EXEC xp_dirtree N'C:\', 10, 1

所以你可以使用游标循环:

DECLARE @FILENAME AS VARCHAR(200)
DECLARE C CURSOR FOR
    SELECT Name
    FROM #FILES
    WHERE IsFile = 1
OPEN C
FETCH NEXT FROM C INTO @FILENAME
WHILE @@FETCH_STATUS = 0
BEGIN
    DO YOUR STUFF BASED ON FILE

    FETCH NEXT FROM C INTO @FILENAME
END
CLOSE C
DEALLOCATE C

这样的事情应该可以解决问题