Add In "WHERE" 子句后的数据转换错误以及 SQL 中 Filter 中的特定数据

Data Conversion Error After Add In "WHERE" clause and for Specific Data In Filter in SQL

目前我遇到一个数据对话错误

"Msg 8114, Level 16, State 5, Line 1 Error converting data type nvarchar to bigint." 

我知道这个错误是由于数据类型不兼容造成的。但是,只有当我的 WHERE 子句(过滤条件)仅适用于该特定用户而不适用于其他用户时才会发生这种情况。我想知道出了什么问题。我尝试使用 CAST 并将 bigint 转换为 nvarchar,但它没有帮助。

在第一个连接中,不兼容的数据类型介于 "survey_result.SR_ANSWER" 作为 NVARCHAR 和 "survey_answer.SA_ID" 作为 BIGINT 之间。我将在此处附上代码、成功结果(另一个最终用户数据)和错误。

如有任何帮助或建议,我们将不胜感激。

SELECT  
        survey_result.SR_SRHRESULTID,
        survey_header.SH_CODE AS SURVEY_CODE,
        survey_header.SH_DESCRIPTION AS SURVEY_NAME,
        survey_result_header.SRH_DATE SURVEY_DATE,
        survey_result.SR_DISTRIBUTOR AS DISTRIBUTOR_CODE,
        dist.DI_NAME DISTRIBUTOR_NAME,
        survey_result_header.SRH_RESPONDENT AS OUTLET_CODE,
        ol.OL_NAME AS OUTLET_NAME,
        survey_result.SR_SURVEYOR AS SALESPERSON_CODE,
        ui.UI_GIVENNAME AS SALESPERSON_NAME,
        survey_question.SQ_INDEX AS QUESTION_NO,
        survey_question.SQ_DESCRIPTION AS QUESTION,
        survey_answer.SA_DESCRIPTION AS RESULT
FROM SURVEYRESULT survey_result LEFT JOIN SURVEYANSWER survey_answer 
on survey_result.SR_SQID =survey_answer.SA_SQID AND survey_result.SR_ANSWER = survey_answer.SA_ID
JOIN SURVEYQUESTION survey_question on survey_question.SQ_ID = survey_result.SR_SQID
JOIN SURVEYHEADER survey_header on survey_question.SQ_SHID = survey_header.SH_ID
JOIN SURVEYRESULTHEADER survey_result_header on survey_result_header.SRH_SHID = survey_result.SR_SHID
AND survey_result_header.SRH_RESULTID = survey_result.SR_SRHRESULTID
AND survey_result_header.SRH_DISTRIBUTOR = survey_result.SR_DISTRIBUTOR
JOIN DISTRIBUTOR dist on dist.DI_DISTRICODE = survey_result.SR_DISTRIBUTOR
JOIN OUTLET ol on ol.OL_OUTLETCODE = survey_result_header.SRH_RESPONDENT
AND ol.OL_DISTRICODE = survey_result.SR_DISTRIBUTOR
JOIN USERINFO ui on ui.UI_USERNAME = survey_result.SR_SURVEYOR
WHERE survey_result_header.SRH_DATE >='2015-10-01' AND survey_result_header.SRH_DATE <='2015-10-31'
AND survey_question.SQ_TYPE IN('1','2','8')
AND survey_header.SH_CODE IN ('MONTALL','TONTALL')
AND survey_result.SR_SURVEYOR ='E08-128' /*this line cause error*/

尝试改变这个:

survey_result.SR_ANSWER = survey_answer.SA_ID 

至此

survey_result.SR_ANSWER = CAST(survey_answer.SA_ID AS VARCHAR(30)) 

看看错误是否消失。

如果它真的消失了,你应该:

  1. 找到导致问题的数据(字段 survey_answer.SA_ID 中的非数值)。你可以用SELECT * FROM survey_answer WHERE ISNUMERIC(SA_ID) = 0找到它
  2. 了解这将对您的查询产生什么影响(即这将永远不会匹配 survey_result.SR_ANSWER 中的数据)

从长远来看,您需要通过以下方式解决 table 设计问题:

  1. 正在更新 survey_answer.SA_ID 中的数据,因此它 数字
  2. 将字段更改为数字数据类型(不是 nvarchar)
  3. 改变任何插入数据的应用程序,这样您就不能插入非数字数据