1
我有一个包含文件名,文件路径和新文件名的记录超过1000个的表。我想将现有文件从FileName重命名为NewFileName。是否有可能将这些文件从SQL Server 2012年改名从SQL Server 2012中重命名文件列表
我能为一个文件,这样做,但我有这样的多个文件的一个问题。
我有一个包含文件名,文件路径和新文件名的记录超过1000个的表。我想将现有文件从FileName重命名为NewFileName。是否有可能将这些文件从SQL Server 2012年改名从SQL Server 2012中重命名文件列表
我能为一个文件,这样做,但我有这样的多个文件的一个问题。
如果需要,可以从SQL Server执行此操作。该解决方案依赖于重命名的信息存储在何处:
的信息存储在一个TABLE
变量或临时表
的信息被存储在规则表
例脚本壳体1(
TABLE
变量,临时表):
SET NOCOUNT ON;
DECLARE @fn TABLE(
file_path VARCHAR(1024),
new_file_name VARCHAR(256)
);
INSERT INTO @fn(file_path,new_file_name)VALUES
('C:\Temp\A.txt','A_new.txt'),
('C:\Temp\B.txt','B_new.txt'),
('C:\Temp\C.txt','C_new.txt');
SELECT
'rename "'+file_path+'" "'+new_file_name+'"' AS stmt
INTO
##cmd_output
FROM
@fn;
DECLARE @cmd VARCHAR(8000);
SET @cmd='BCP "SELECT stmt FROM ##cmd_output" QUERYOUT "C:\Temp\rename_all.bat" -c -T -S ' + @@SERVERNAME;
EXEC master..xp_cmdshell @cmd;
EXEC master..xp_cmdshell 'C:\Temp\rename_all.bat';
EXEC master..xp_cmdshell 'DEL C:\Temp\rename_all.bat';
DROP TABLE ##cmd_output;
例脚本壳体2(常规表):
CREATE TABLE file_renames(
file_path VARCHAR(1024),
new_file_name VARCHAR(256)
);
GO
INSERT INTO file_renames(file_path,new_file_name)VALUES
('C:\Temp\A.txt','A_new.txt'),
('C:\Temp\B.txt','B_new.txt'),
('C:\Temp\C.txt','C_new.txt');
DECLARE @cmd VARCHAR(8000);
SET @cmd='BCP "SELECT ''rename ""''+file_path+''"" ""''+new_file_name+''""'' AS stmt FROM file_renames" QUERYOUT "C:\Temp\rename_all.bat" -c -T -S ' + @@SERVERNAME + ' -d ' + DB_NAME();
EXEC master..xp_cmdshell @cmd;
EXEC master..xp_cmdshell 'C:\Temp\rename_all.bat';
EXEC master..xp_cmdshell 'DEL C:\Temp\rename_all.bat';
光标或'while'循环? – Rhumborl
为什么你认为SQL Server会比批处理脚本更适合这个任务?是因为你已经在数据库中有了新的文件名,并且它们没有遵循明显的模式? – Bridge
我已经在数据库中有名称,是的,新名称不遵循任何模式。 –