Страницы: 1
RSS
Как объединить строки SQL в одну строку правильно для запуска из VBA?
 
Здравствуйте!

В VBA скрипте макроса использую ADODB для выполнения запросов к БД.
Есть SQL скрипт, который успешно запускается в MS SQL Server Management Studio
Код
declare @div int, @period int
set @div = null
select   @period = 202001

SELECT EMR.LINK, EMR.D_Date, FC.LINK F_Charges, fcd.F_Registr_Pts
INTO #EMR1
   FROM ee.FD_Paysheets FC
   INNER JOIN ee.FVT_Paysheets_Details FCD
      ON  FC.LINK = FCD.F_Paysheets
      AND FC.N_Period = @PERIOD
   INNER JOIN SD_Divisions SD
      ON  SD.LINK = FC.F_Division
      AND (SD.LINK = 5 OR SD.F_Division = 5)
      AND (fc.F_Division = @div or @div is null)
   INNER JOIN ED_Meter_Readings EMR
      ON  EMR.LINK = FCD.F_Meter_Readings

Как его сконкатенировать правильно, чтобы он исполнился как единое целое из VBA?
Обычный ConnectionString.Execute "Select 1 as a" выполнить просто. А вот много строчный скрипт с объявлением параметров, созданием временных таблиц и их последующим удалением как исполнить. Ведь если я запущу отдельный Execute для объявления параметра, а в следующем Execute помяну ранее созданные параметр,SQL Server меня не поймет...
желаю всем счастья
 
Добрый вечер
Может как-то так?
Код
Sub xx()
    INIT = Array("192.168.0.1\Server1", "DB", "Admin", InputBox("pwd"))
    Sql = Join(Array( _
            "SET NOCOUNT ON", _
            "declare @div int, @period int", _
            "set @div = null", _
            "select   @ Period = 202001", _
            "", _
            "SELECT EMR.LINK, EMR.D_Date, FC.LINK F_Charges, fcd.F_Registr_Pts", _
            "INTO #EMR1", _
            "   FROM ee.FD_Paysheets FC", _
            "   INNER JOIN ee.FVT_Paysheets_Details FCD", _
            "      ON  FC.LINK = FCD.F_Paysheets", _
            "      AND FC.N_Period = @PERIOD", _
            "   INNER JOIN SD_Divisions SD", _
            "      ON  SD.LINK = FC.F_Division", _
            "      AND (SD.LINK = 5 Or SD.F_Division = 5)", _
            "      AND (fc.F_Division = @div or @div is null)", _
            "   INNER JOIN ED_Meter_Readings EMR", _
            "      ON  EMR.LINK = FCD.F_Meter_Readings" _
          ), vbCr)
    With CreateObject("adodb.recordset")
        .Open _
            Sql, _
            "Driver={SQL Server};Server=" & INIT(0) & _
                ";Database=" & INIT(1) & _
                ";Uid=" & INIT(2) & _
                ";Pwd=" & INIT(3) & ";", _
            3
    End With
End Sub
 
Андрей Лящук, спасибо, попробую
желаю всем счастья
Страницы: 1
Наверх