Dobrý večer pane Koutský,
potřebujeme, abyste nám znovu zaslal cca 1000 souborů, protože nedošlo k automatickému spárování se systémem. Seznam požadovaných souborů je v příloze.
TVL vážně? Je pátek 19:00 a ten adresář má 97 tisíc souborů, jak z toho mám vykopírovat 1049 souborů ??
Vždycky je řešení . Výpověď, přehodit to na kolegyni, ... A nebo si napsat skript pro SQL :-)
Níže uvedený script počítá, že csv soubor má jeden sloupec s názvem souboru. Pro vícesloupcový soubor si jednoduše upravte temp tabulku, skript s více sloupci počítá (oodělovač, akorát název souboru musí být ve sloupci Soubor
Pochopitelně musíte mít povolené a nakonfigurované použití XP_CMDSHELL a BULK INSERT
-- deklarace proměnných
DECLARE
@soubor nvarchar(50),
@From nvarchar(50) = '\\ds02\atesty\',
@To nvarchar(50) = '\\ds02\atesty\copy\',
@SQL nvarchar(500)
--vytvoreni pomocne tabulky
CREATE TABLE #TabImport (soubor nvarchar(50))
-- import z csv do pomocne tabulky
BULK INSERT #TabImport
FROM '\\ds02\atesty\import.csv'
WITH (
FIELDTERMINATOR =',',
ROWTERMINATOR ='\n',
FIRSTROW = 1,
CODEPAGE = 'ACP'
)
-- kolik to bude souboru? Řeší i duplicitu. Pro kontrolu
SELECT COUNT (DISTINCT(soubor)) FROM #TabImport
-- cyklus pro nazev souboru
DECLARE cur_vypocet CURSOR FOR
-- nacteni nazvu souboru z pom.tab
SELECT DISTINCT(soubor) FROM #TabImport
-- otevreni kurzoru
OPEN cur_vypocet
FETCH NEXT FROM cur_vypocet INTO @soubor
WHILE @@FETCH_STATUS=0
BEGIN
-- sestaveni prikazu pro kopii souboru
SET @sql = 'copy ' + @From + @soubor + ' ' + @To + @soubor
-- zavolani procedury s parametrem kopirovani pro dany soubor
EXEC master.dbo.xp_cmdshell @SQL
-- pokracuj na dalsi soubor
FETCH NEXT FROM cur_vypocet INTO @soubor
END
-- uzavreni kurzoru
CLOSE cur_vypocet
-- uvolneni pameti
DEALLOCATE cur_vypocet
-- promazani pomocne tabulky
DELETE FROM #TabImport
-- zruseni tabulky
DROP TABLE #TabImport
A jde se na pivo :-)