簡體   English   中英

字符串查詢中的列在執行時沒有被分隔

[英]Columns in string query not being delimited when executed

我有一個設置為字符串的 SQL 語句。 每當我在我的應用程序中本地執行調用時,我都會收到一個錯誤,其中似乎 SQL 沒有正確構建並且沒有在兩個不同的列之間用逗號分隔。 我想知道為什么會這樣。 在這些列之間有一個帶有表達式的 Iif 語句,但我不確定如何在語法上對字段進行分隔。

我得到的錯誤是:

捕獲異常:System.Data.dll 中的“System.Data.SqlClient.SqlException”(“無效的列名 '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

我是否缺少像上面的輸出那樣格式化它的東西? 我已經修改了很多,但似乎無法以正確的格式正確構建它。 任何建議非常感謝!

試試這個代碼:

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

逗號在錯誤的位置:只有在要包含附加列時才應該在那里:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM