0

我想创建一个使用表中一列中的值的变量,使用该 # 执行一个函数,然后移动到该列中的下一行以再次执行相同的函数。

我已经尝试了几种方法并且在完成它时遇到了问题,不确定我是否走在正确的道路上。

从此表中:

INSERT #DirectoryTree (subdirectory,depth,isfile)
EXEC master.sys.xp_dirtree 'D:\Documents and Settings\arabrya\Desktop\Project\mdb files',1,1;


SELECT * FROM #DirectoryTree
ORDER BY id;
GO

输出是:

id      subdirectory
1   4483167B.mdb
2   4536807.mdb
3   4536897A.mdb
4   4536897B.mdb
5   4546780.mdb
6   4619524.mdb
7   4662828.mdb
8   4700416.mdb
9   4706729.mdb
10  4789161.mdb
11  4789161A.mdb
12  4808925.mdb
13  4882574A.mdb
14  4910394A.mdb
15  4986274.mdb
16  976767.mdb
17  976767A.mdb
18  976767B.mdb

去做这个:

INSERT INTO [test5].[dbo].[tblJob]
SELECT *  FROM OPENDATASOURCE(
'Microsoft.Jet.OLEDB.4.0',
'Data Source="\\bhr05\mdb\' + @varName + '.mdb"'

其中@varName 是“#DirectoryTree”表中“子目录”列中的变量。这可能吗?如果是怎么办?

4

1 回答 1

3

一种方法是声明一个游标以循环遍历表:

DECLARE @name VARCHAR(20) -- database name 

DECLARE db_cursor CURSOR FOR  
SELECT subdirectory 
FROM #DirectoryTree 

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @subdirectory    

WHILE @@FETCH_STATUS = 0   
BEGIN   
    INSERT INTO [test5].[dbo].[tblJob]
    SELECT *  FROM OPENDATASOURCE(
    'Microsoft.Jet.OLEDB.4.0',
    'Data Source="\\bhr05\mdb\' + @subdirectory + '.mdb"' 

END   

CLOSE db_cursor   
DEALLOCATE db_cursor
于 2013-07-09T20:50:15.267 回答