我想创建一个变量,该变量在表中的一列中使用值,使用该#执行一个函数并移动到该列中的下一行以再次执行相同的功能。
我尝试了几种方法并且在完成它时遇到了问题,不确定我是否在正确的道路上。
来自此表:
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'表。这可能吗?如果是的话?
答案 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