2013-07-09 161 views
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'表中。这可能吗?如果是的话?

回答

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