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
我已經在數據庫中有名稱,是的,新名稱不遵循任何模式。 –