[英]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.