Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1319522934
И. Павел
2011-10-25 10:08
2012.02.12
Пропала палитра компонентов


15-1319444691
Фокс Йожин
2011-10-24 12:24
2012.02.12
Странные тормоза при загрузке Windows XP


3-1272018364
снежок
2010-04-23 14:26
2012.02.12
Помогите с решением запроса


15-1316061929
P
2011-09-15 08:45
2012.02.12
Windows 8 Developer Preview


15-1319401805
Юрий
2011-10-24 00:30
2012.02.12
С днем рождения ! 24 октября 2011 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский