列中所有行的可变变量

时间:2013-07-09 20:44:31

标签: sql sql-server

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

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

来自此表:

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'表。这可能吗?如果是的话?

1 个答案:

答案 0 :(得分: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