Форум: "Прочее";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];
ВнизПодскажите с внешними командами с файлами к MSSQL(копировать) Найти похожие ветки
← →
OW © (2011-10-26 12:13) [0]Читаю:
http://msdn.microsoft.com/en-us/library/ms175046.aspx
...
USE master;
EXEC xp_cmdshell "copy c:\SQLbcks\AdvWorks.bck
\\server2\backups\SQLbcks, NO_OUTPUT";
GO
...
Пишу:
declare @FileFullName varchar(100), @CMD varchar(200),
@ResultVar int;
set @FileFullName = "C:\boot.ini";
EXEC Master.dbo.xp_fileexist @FileFullName, @ResultVar OUT
if @ResultVar = 1
begin
print "НАЙДЕН!"
set @CMD = "copy " + @FileFullName + " D:\boot.ini"
print @CMD
EXEC master.dbo.xp_cmdshell @CMD
end else
Print "Не найден еще в xp_fileexist"
Messages:
---------
(1 row(s) affected)
НАЙДЕН!
copy C:\boot.ini D:\boot.ini
(4 row(s) affected)
Results:
-------------
C:\boot.ini
The system cannot find the file specified.
0 file(s) copied.
NULL
Почему не находит? (Файл точно есть, да и первая ф-ция его нашла же)
← →
Медвежонок Пятачок © (2011-10-26 12:39) [1]а ты уверен что не найдено именно то, что ты думаешь, а не другое?
например "copy"?
← →
OW © (2011-10-26 12:42) [2]>> Медвежонок Пятачок © (26.10.11 12:39) [1]
так пишет же..
> Results:
> -------------
> C:\boot.ini
> The system cannot find the file specified.
ничего не понимаю.
run-cmd-ENTER
C:\>copy c:\1.txt d:\2.txt
Скопировано файлов: 1.
d:\2.txt стираю, пишу
declare @CMD varchar(200)
set @CMD = "copy c:\1.txt d:\2.txt"
print @CMD
EXEC master.dbo.xp_cmdshell @CMD
запускаю
Messages
---------
copy c:\1.txt d:\2.txt
(2 row(s) affected)
Results
---------
The system cannot find the file specified.
NULL
← →
OW © (2011-10-26 12:47) [3]БЛИН!!!!
ОН ищет же его на СЕРВЕРЕ!!!!
создал там, на C: 1.txt и вот:
copy c:\1.txt d:\2.txt
(2 row(s) affected)
1 file(s) copied.
NULL
← →
OW © (2011-10-26 12:48) [4]стоп..
а как же
Master.dbo.xp_fileexist
находил..
← →
Ega23 © (2011-10-26 12:49) [5]
> ОН ищет же его на СЕРВЕРЕ!!!!
Естественно.
Но можно и сетевые пути указывать, в том файле как раз есть.
← →
Медвежонок Пятачок © (2011-10-26 12:49) [6]а где же он его может искать если не на сервере?!
сервер же сам на сервере работает.
← →
Ega23 © (2011-10-26 12:54) [7]http://msdn.microsoft.com/ru-ru/library/ms187389%28v=SQL.90%29.aspx
Я на минуточку не понял: а что такоеxp_fileexist
← →
OW © (2011-10-26 13:01) [8]все правильно, на старом месте привык прямо за серваком сидеть, если что-то правил, вдруг, и совсем забыл.
> Я на минуточку не понял: а что такое xp_fileexist
Процедурка тоже. Из разряда xp_cmdshell
Работает похоже только иначе.. Она смотрит мои файлы, на машине где запускается. (по всему выходит, что именно так. Находит же на локалке моей файлы. И путала, коза :) )
← →
Ega23 © (2011-10-26 13:10) [9]
> Процедурка тоже. Из разряда xp_cmdshell
Я понял, что процедурка. Почему в BOL не описана?
← →
OW © (2011-10-26 13:14) [10]Ну...недокументированная, очевидно, значит :)
http://blogs.msdn.com/b/sathishcg/archive/2006/11/24/undocumented-sql-server-2000-functions.aspx
← →
Ega23 © (2011-10-26 13:18) [11]Покажи, щито возвращает
EXEC Master.dbo.xp_fileexist "C:\boot.ini"
← →
OW © (2011-10-26 13:40) [12]File Exists File is a Directory Parent Directory Exists
----------- ------------------- -----------------------
1 0 1
(1 row(s) affected)
← →
OW © (2011-10-26 13:46) [13]
> OW © (26.10.11 13:40) [12]
причем, C:\boot.ini на сервере отсутствует
он только на моей машине
← →
Ega23 © (2011-10-26 13:51) [14]Чудесато...
← →
Ega23 © (2011-10-26 13:52) [15]ИМХО. Напиши CMD-скрипт и дёргай его.
← →
OW © (2011-10-26 17:59) [16]да не, все правильно и все работает.
надо просто помнить про особенность.
Они ее не документировали, так что имеет право на такое поведение.
или понаписал тут уже
ALTER FUNCTION [dbo].[DeleteFile]
(
@FileSrc VarChar(120)
)
RETURNS int
AS
BEGIN
declare @CMD varChar(255), @Result int;
set @CMD = "erase " + @FileSrc;
EXEC @Result = xp_cmdshell @CMD, NO_OUTPUT;
Return @Result;
END
или
ALTER FUNCTION [dbo].[CopyFile]
(
@FileSrc VarChar(120), @FileDst VarChar(120)
)
RETURNS int
AS
BEGIN
declare @CMD varChar(255), @Result int;
set @CMD = "copy " + @FileSrc + " " + @FileDst;
--print @CMD;
EXEC @Result = xp_cmdshell @CMD, NO_OUTPUT;
Return @Result;
END
или
ALTER FUNCTION [dbo].[FileExists]
(
@FileFullName varchar(255)
)
RETURNS int
AS
BEGIN
DECLARE @ResultVar int;
EXEC Master.dbo.xp_fileexist @FileFullName, @ResultVar OUT
RETURN @ResultVar;
END
зато вспомнил, и удобно стало, и на Delphi похоже стало :)
while (dbo.FileExists("w:\scards_nas_1.txt") = 1)
begin
waitfor delay "00:00:59"; -- ждать минуту. Надо синхронно положить файлы!
end;
set @Result = dbo.CopyFile("D:\buffer\scards_nas_1.txt", "w:\scards_nas_1.txt");
if @Result = 0
begin
set @Result = dbo.DeleteFile("D:\EXPORT\buffer\scards_nas_1.txt");
← →
OW © (2011-10-27 19:37) [17]Короче, еще засада была
На сетевую шару не копирует, оказывается
Спасибо Ега, напомнил как надо писать.
Полный вариант таков, может кому надо будет
declare @CMD varChar(255)
set @CMD = "net use w: /delete";
EXEC @RES = xp_cmdshell @CMD, NO_OUTPUT
set @CMD = " net use w: \\192.168.8.30\exchange\io password /user:username /persistent:yes";
EXEC xp_cmdshell @CMD
set @CMD = "copy D:\1.txt \\192.168.8.30\exchange\io\1.txt";
EXEC xp_cmdshell @CMD
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c