Столбцы в строковом запросе не разделяются при выполнении - PullRequest
0 голосов
/ 07 января 2020

У меня есть оператор SQL, заданный в виде строки. Всякий раз, когда я выполняю вызов в моем приложении локально, я получаю сообщение об ошибке, в котором кажется, что SQL не создается должным образом и не разделяется запятой между двумя разными столбцами. Мне интересно, почему это происходит. Есть оператор Iif с выражением между этими столбцами, но я не уверен синтаксически, как сделать поле разделенным.

Ошибка, которую я получаю:

Обнаружено исключение: «System.Data.SqlClient.SqlException» в System.Data.dll («Неверное имя столбца« CONTACT_EMAILT ».»)

Ниже приведена существующая строка запроса:

strSQLXL = "SELECT V.VND_NBR
  ,VND_NAME
  ,C.CONTACT_NAME
  ,C.CONTACT_EMAIL," & IIf(MyApp.objUserShadow.CountryUserSelected = 1, "T.[NAME] AS CONTACT_TYPE ", " ") & "  
FROM dbo.TBL_VND_VBU AS V
INNER JOIN dbo.TBL_VND_VBU_CONTACT AS C
ON V.VND_NBR = C.VND_NBR AND V.CRY_CD = C.CRY_CD
INNER JOIN dbo.TBL_VND_TYPE AS T
ON C.CONTACT_TYPE = T.ID 
WHERE V.CRY_CD = " & VMS.objUserShadow.CountryUserSelected

Вывод, когда я выполняю это для журналов Intellitrace, выглядит следующим образом:

SELECT V.VND_NBR
      ,VND_NAME
      ,C.CONTACT_NAME
      ,C.CONTACT_EMAILT.[NAME] AS CONTACT_TYPE
FROM dbo.TBL_VND_VBU AS V
INNER JOIN dbo.TBL_VND_VBU_CONTACT AS C
ON V.VND_NBR = C.VND_NBR AND V.CRY_CD = C.CRY_CD
INNER JOIN dbo.TBL_VND_TYPE AS T
ON C.CONTACT_TYPE = T.ID 
WHERE V.CRY_CD = 1

Вывод должно быть:

SELECT V.VND_NBR
          ,VND_NAME
          ,C.CONTACT_NAME
          ,C.CONTACT_EMAIL
          ,T.[NAME] AS CONTACT_TYPE   
    FROM dbo.TBL_VND_VBU AS V
    INNER JOIN dbo.TBL_VND_VBU_CONTACT AS C
    ON V.VND_NBR = C.VND_NBR AND V.CRY_CD = C.CRY_CD
    INNER JOIN dbo.TBL_VND_TYPE AS T
    ON C.CONTACT_TYPE = T.ID 
    WHERE V.CRY_CD = 1

Что-то мне не хватает, чтобы отформатировать его, как вывод выше? Я много возился, но, похоже, не могу заставить его правильно строить в нужном формате. Любые предложения приветствуются!

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Запятая находится не в том месте: она должна быть только в том случае, если добавляется дополнительный столбец:

Dim contactTypeColumn As String = If(MyApp.objUserShadow.CountryUserSelected = 1, ", T.[NAME] AS CONTACT_TYPE ", " ")

strSQLXL = "SELECT V.VND_NBR
  ,VND_NAME
  ,C.CONTACT_NAME
  ,C.CONTACT_EMAIL" & contactTypeColumn & "  
FROM dbo.TBL_VND_VBU AS V
INNER JOIN dbo.TBL_VND_VBU_CONTACT AS C
ON V.VND_NBR = C.VND_NBR AND V.CRY_CD = C.CRY_CD
INNER JOIN dbo.TBL_VND_TYPE AS T
ON C.CONTACT_TYPE = T.ID 
WHERE V.CRY_CD = " & VMS.objUserShadow.CountryUserSelected
0 голосов
/ 07 января 2020

Попробуйте этот код:

strSQLXL = "SELECT V.VND_NBR, VND_NAME, C.CONTACT_NAME, C.CONTACT_EMAIL" & _
           IIf(MyApp.objUserShadow.CountryUserSelected = 1, ", T.[NAME] AS CONTACT_TYPE ", " ") & _
           "FROM dbo.TBL_VND_VBU AS V INNER JOIN dbo.TBL_VND_VBU_CONTACT AS C " & _
           "ON V.VND_NBR = C.VND_NBR AND V.CRY_CD = C.CRY_CD " & _
           "INNER JOIN dbo.TBL_VND_TYPE AS T ON C.CONTACT_TYPE = T.ID " & _
           "WHERE V.CRY_CD = " & _
           VMS.objUserShadow.CountryUserSelected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...