【发布时间】:2015-12-16 00:09:06
【问题描述】:
The output Screenshot我有一个脚本,它遍历 SQL Server 数据库表以确定文件类型,然后重命名网络共享上的文件以添加适当的扩展名。脚本如下:
DECLARE @UNC AS varchar(255), @Filetype AS varchar(255), @CMD AS VARCHAR(255)
declare @HPF_Test as cursor;
SET @HPF_Test = CURSOR FOR
select UNC, Filetype
from HPF_Test;
OPEN @HPF_Test;
Fetch NEXT from @HPF_Test into @UNC, @Filetype;
While @@fetch_status=0
begin
SELECT @CMD = 'REN ' + @UNC + ' '
+ RIGHT(@UNC, CHARINDEX('\', REVERSE(@UNC)) - 1)
+ case when @Filetype = 'TIF' THEN '.TIF' when @Filetype = 'TXT' THEN '.TXT' when @Filetype = 'XML' THEN '.XML' END
FROM HPF_Test
exec master..xp_cmdshell @CMD
Fetch next from @HPF_Test into @UNC, @Filetype
end
close @HPF_Test;
deallocate @HPF_Test;
由于大约有 9200 万张图像需要重命名,因此整个过程的运行和完成需要时间。因此,我有以下几个问题:
1) 可以在脚本中添加什么来测试是否所有文件都被复制了?
2) 有人建议我们批量运行脚本。我怎样才能把它分成批次?
请在这方面帮助我。我是这方面的新手。
谢谢!
更新:
我有三个要测试此代码的文件。所以,当我运行上面的代码时,我得到三个输出,它们都是 NULL。但是,当我尝试在表中捕获结果时,我得到两条记录 1) 系统找不到指定的文件 & 2)NULL
我正在使用将下面的脚本添加到原始脚本中以将结果捕获到表格中。
CREATE TABLE #TEMP_test3(t nvarchar(255))
insert #TEMP_test3(t)
exec master..xp_cmdshell @CMD
select * from
#TEMP_test3
谁能在这方面帮助我,或者至少告诉我我在这里做错了什么?
谢谢!!!
【问题讨论】:
-
exec master..xp_cmdshell将运算结果返回到nvarchar(255)列。您可以检查返回的内容并将其写入表中。例如。如果您尝试重命名不存在的文件,REN 命令将显示:The system cannot find the file specified. -
如果命令在某些时候由于某种原因失败了,比如说在重命名了 4200 万个文件之后,那么我将如何找出它失败的地方?随后如何从那时起重新运行命令重命名文件?
-
我建议您在 HPF_Test 表中添加一个名为
result的列。只需将 xp_cmdshell 命令的结果写入此列即可。然后,您可以对该列运行查询以查看哪个失败 -
您能告诉我该怎么做吗?至于我需要在现有代码中添加什么以及在哪里添加?
标签: sql sql-server-2008 file-rename xp-cmdshell