SQL Server 2012 中的文件重命名列表
Rename list of files from SQL Server 2012
我有一个 table,它有 1000 多条记录,包括文件名、文件路径和新文件名。我想将现有文件从 FileName 重命名为 NewFileName。是否有可能从 SQL Server 2012.
重命名这些文件
我可以对一个文件执行此操作,但对多个文件执行此操作时遇到问题。
DECLARE @cmd varchar(1000)
SET @cmd = 'rename C:\Test\A.txt A_new.txt'
EXEC master..xp_cmdshell @cmd
如果需要,您可以从 SQL 服务器执行此操作。解决方案取决于重命名信息的存储位置:
信息存储在TABLE
变量或临时Table
- 将重命名语句插入全局临时文件table
- 使用BCP将全局临时文件table导出到批处理文件
- 执行批处理文件
- 删除批处理文件
- 删除全局临时文件table
信息存储在常规table
- 使用 BCP 将重命名语句导出到批处理文件
- 执行批处理文件
- 删除批处理文件
Example script for case 1 (TABLE
variables, Temporary Tables):
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;
Example script for case 2 (regular tables):
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';
我有一个 table,它有 1000 多条记录,包括文件名、文件路径和新文件名。我想将现有文件从 FileName 重命名为 NewFileName。是否有可能从 SQL Server 2012.
重命名这些文件我可以对一个文件执行此操作,但对多个文件执行此操作时遇到问题。
DECLARE @cmd varchar(1000)
SET @cmd = 'rename C:\Test\A.txt A_new.txt'
EXEC master..xp_cmdshell @cmd
如果需要,您可以从 SQL 服务器执行此操作。解决方案取决于重命名信息的存储位置:
信息存储在
TABLE
变量或临时Table- 将重命名语句插入全局临时文件table
- 使用BCP将全局临时文件table导出到批处理文件
- 执行批处理文件
- 删除批处理文件
- 删除全局临时文件table
信息存储在常规table
- 使用 BCP 将重命名语句导出到批处理文件
- 执行批处理文件
- 删除批处理文件
Example script for case 1 (
TABLE
variables, Temporary Tables):
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;
Example script for case 2 (regular tables):
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';