Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Использование VbScript для администратора Windows


Выпуск #14

"Vbs, whs, js скрипты для администратора"

8 ноября 2012

Доброе время суток подписчик!

Я работаю программистом TSQL. Не от хорошей жизни я воспользовался vbs. Мне нужно было сделать выгрузку данных для клиента используя стандартную утилиту MS SQL Server bcp. Однако она была установлено "криво" и вообще не работала. Я попытался это дело исправить, потратил время, но не добился ничего. Я вспомнил про старый добрый vbs, который всегда работает. Собственно об этом мой выпуск.


Как использовать VBS из-под MS-SQL Server 2008?

Запуск скрипта в MS SQL Server осуществляется с помощью команды:

  declare @strSQL varchar(1000)       
  set @strSQL ='cscript C:\Projects\WebRoot\VBS\MaterialVGBX.vbs ' + cast (@Material_id as varchar) 
  EXEC master..xp_cmdshell @strSQL

 

И ниже скрипт:

'==========================================  Начало файла 
'Имя: MaterialVBX.vbs 
'Язык: VBScript 
'Описание: Вывод данных в формат CSV 
'========================================================== 

dim objConnect
dim objRst
Dim strSQL
Dim lngMat_ID
dim objFSO
dim objCSV
Set objArgs = WScript.Arguments

lngMat_ID=objArgs(0)   


set objConnect = CreateObject("ADODB.Connection")
set objRst = CreateObject("ADODB.Recordset")
objConnect.Open _
    "Provider=SQLOLEDB;Data Source=;" & _
        "Initial Catalog=;" & _
             "User ID=sa;Password=;"

If lngMat_ID=0 then
   strSQL_Mat= "select distinct mm.tid from Materials mm (nolock) inner join MaterialUnits mmu (nolock) on mm.tid = mmu.Material_id inner join Units mu (nolock) on mmu.Unit_id = mu.tid "
else
   strSQL_Mat =" select distinct mm.tid from Materials mm (nolock) inner join MaterialUnits mmu (nolock) on mm.tid = mmu.Material_id inner join Units mu (nolock) on mmu.Unit_id = mu.tid where mm.tid=" & lngMat_ID
end if
strSQL = "select [Артикул]= m.NameEN , [Наименование]= m.NameRU,   "
strSQL = strSQL & "   [Ед.изм.]=u.NameRU ,[Длина]=Isnull(mu.Length,0),[Ширина]=IsNull(mu.Width,0),   "
strSQL = strSQL & "   [Высота]=ISNULL( mu.Height,0), [Объем]=ISNULL( mu.UnitVolume,0) ,[Вес]=ISNULL( mu.BruttoWeight,0)  "
strSQL = strSQL & "   from Materials m (nolock)    "
strSQL = strSQL & "   inner join MaterialUnits mu (nolock) on m.tid = mu.Material_id   "
strSQL = strSQL & "   inner join Units u (nolock) on mu.Unit_id = u.tid   "
strSQL = strSQL & "   where  "
strSQL = strSQL & "   m.tid in (" & strSQL_Mat & ") and lower(u.ShortName) like ('%кор%')      "
strSQL = strSQL & "    union all  "
strSQL = strSQL & "    select [Артикул]= m.NameEN , [Наименование]= m.NameRU,   "
strSQL = strSQL & "   [Ед.изм.]=u.NameRU ,[Длина]=Isnull(mu.Length,0),[Ширина]=IsNull(mu.Width,0),   "
strSQL = strSQL & "   [Высота]=ISNULL( mu.Height,0), [Объем]=ISNULL( mu.UnitVolume,0) ,[Вес]=ISNULL( mu.BruttoWeight,0)  "
strSQL = strSQL & "   from Materials m (nolock)    "
strSQL = strSQL & "   inner join MaterialUnits mu (nolock) on m.tid = mu.Material_id   "
strSQL = strSQL & "   inner join Units u (nolock) on mu.Unit_id = u.tid   "
strSQL = strSQL & "   where  "
strSQL = strSQL & "   m.tid in (" & strSQL_Mat & " )   and lower(u.ShortName) like ('%уп%')  "
strSQL = strSQL & "    union all  "
strSQL = strSQL & "    select [Артикул]= m.NameEN , [Наименование]= m.NameRU,   "
strSQL = strSQL & "   [Ед.изм.]=u.NameRU ,[Длина]=Isnull(mu.Length,0),[Ширина]=IsNull(mu.Width,0),   "
strSQL = strSQL & "   [Высота]=ISNULL( mu.Height,0), [Объем]=ISNULL( mu.UnitVolume,0) ,[Вес]=ISNULL( mu.BruttoWeight,0)  "
strSQL = strSQL & "   from Materials m (nolock)    "
strSQL = strSQL & "   inner join MaterialUnits mu (nolock) on m.tid = mu.Material_id   "
strSQL = strSQL & "   inner join Units u (nolock) on mu.Unit_id = u.tid   "
strSQL = strSQL & "   where  "
strSQL = strSQL & "   m.tid in (" & strSQL_Mat & " )   and lower(u.ShortName) like ('%шт%')       "
objRst.Open strSQL, objConnect
Dim lngI
set objFSO = CreateObject("Scripting.FileSystemObject")
set objCSV = objFSO.CreateTextFile ("C:\WMS\MaterialVGBX.csv")
objRst.MoveFirst
For lngI=0 to objRst.Fields.Count-2
    objCSV.Write objRst.Fields(lngI).Name & vbTab
Next
objCSV.Write objRst.Fields(objRst.Fields.Count-1).Name
objCSV.WriteLine
While objRst.EOF=False
   For lngI=0 to objRst.Fields.Count-2
      objCSV.Write trim(objRst(lngI).Value) & vbTab
   Next
   objCSV.Write objRst(objRst.Fields.Count-1).Value
   objCSV.WriteLine
   objRst.MoveNext
Wend
objRst.Close
objConnect.Close
set objRst= Nothing
Set objConnect= Nothing 
'==========================================  Конец файла       

Я буду очень рад, если мой скрипт кому-то окажет помощь. Пишите письма на e-mail , который указан внизу письма, буду рад оказать свою помощь. Я комментировал мало, если кому будет интересно пишите я сделаю следующий выпуск рассылки. Разумеется я не показал данные сервера, логин и пароль - по понятным причинам.

Со мной можносвязаться по e-mail - novopashinwm@mail.ru

Copyright 2012 Новопашин Владимир. Все права защищены.


В избранное