При написании кода в VBA оператор SQL имеет параметр таблицы - PullRequest
0 голосов
/ 10 апреля 2020

У меня проблемы с запросом SQL в Excel VBA. Я бы определенно написал хранимую процедуру, однако это запрещено в нашей базе данных Salesforce (если вы не администратор).

Приведенный ниже код прекрасно работает в SQL и работает хорошо, однако, когда я помещаю его в VBA, он возвращается с сообщением об ошибке, указывающим

Должен объявить переменную таблицы " @ ServiceRequestSELECT

и я не уверен, почему. Я также пытался использовать временную таблицу, и это тоже не работает. Я уверен, что это глупая синтаксическая ошибка где-то.

"INSERT INTO @ServiceRequest" & _
"SELECT t6.name, t1.Status, format(t1.[CreatedDate], 'MM-dd-yyyy'), t5.Name, t2.Name, t1.Escalation__c" & _
"FROM [Salesforce_Reporting].[dbo].[Case] t1" & _
"LEFT JOIN [Salesforce_Reporting].[dbo].[Policy__c] t2 ON t1.[Policy__c] = t2.[Id]" & _
"LEFT JOIN [Salesforce_Reporting].[dbo].[Account] t3 ON t2.[Office__c] = t3.[Id]" & _
"LEFT JOIN [Salesforce_Reporting].[dbo].[Contact] t4 ON t1.[Broker_of_Record__c] = t4.[Id]" & _
"LEFT JOIN [Salesforce_Reporting].[dbo].[User] t5 ON t1.[OwnerId] = t5.[Id]" & _
"LEFT JOIN [Salesforce_Reporting].[dbo].[RecordType] t6 ON t1.[RecordTypeId] = t6.[Id]" & _
"WHERE t3.[MVP_Status__c] = 'Implemented'" & _
"AND t5.[Profile__c] = 'Customer Loyalty Manager'" & _
"and t3.Source_System_Natural_Key__c = '" & Range("Source_System_Natural_Key") & "'" & _
"and t1.CreatedDate > Dateadd(year, -1, getdate())" & _
"ORDER BY t1.ClosedDate desc" & _
"Select count(case when [SR_Type] = [General Policy Maintenance] then 1 else NULL End) as [General Policy Maintenance]," & _
"count(case when [SR_Type] = [Information Request/Inquiry] then 1 else NULL End) as [Information Request/Inquiry]," & _
"count(case when [SR_Type] = [Service Issue] then 1 else NULL End) as [Service Issue]," & _
"count(case when [Escalation] in ([Open],[Resolved],[Monitor]) then 1 else NULL end) as [Escalation] from @ServiceRequest"
Set rs = con.Execute(sSQL)
If rs.EOF = False Then ThisWorkbook.Sheets("Console").Cells(26, 3).CopyFromRecordset rs

1 Ответ

1 голос
/ 10 апреля 2020

Вам не хватает пробелов между практически каждой составной частью.

Например, это:

"insert into @ServiceRequest" & _
"SELECT t6.name, t1.Status, format(t1.[CreatedDate], 'MM-dd-yyyy'), t5.Name, t2.Name, t1.Escalation__c" & _
"FROM [Salesforce_Reporting].[dbo].[Case] t1" & _

Создает строку типа:

insert into @ServiceRequestSELECT t6.name, t1.Status, format(t1.[CreatedDate], 'MM-dd-yyyy'), t5.Name, t2.Name, t1.Escalation__cFROM [Salesforce_Reporting].[dbo].[Case] t1
                         --^--              

Вам понадобится:

"insert into @ServiceRequest " & _
"SELECT t6.name, t1.Status, format(t1.[CreatedDate], 'MM-dd-yyyy'), t5.Name, t2.Name, t1.Escalation__c " & _
"FROM [Salesforce_Reporting].[dbo].[Case] t1 " & _
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...