Sql 运行存储过程时转换失败

Sql 运行存储过程时转换失败,sql,stored-procedures,Sql,Stored Procedures,阿罗哈 我有一个存储过程,它在3个不同的列中查找一个值 ALTER PROCEDURE [dbo].[sp_CLAIMS_QUERY_FAC_] @sPLAN varchar(5), @sTYPE varchar(3), @nVALUE varchar(10) , @begDOS date, @endDOS date AS BEGIN SET NOCOUNT ON; -- QUERY BASED ON CAID...................

阿罗哈

我有一个存储过程,它在3个不同的列中查找一个值

ALTER  PROCEDURE [dbo].[sp_CLAIMS_QUERY_FAC_]

  @sPLAN  varchar(5),
  @sTYPE  varchar(3),
  @nVALUE varchar(10) ,
  @begDOS date,
  @endDOS date

 AS
 BEGIN

    SET NOCOUNT ON;

 -- QUERY BASED ON CAID.............................................................
 IF @sPLAN = 'CAID'
   IF @sTYPE = 'MBR'
       BEGIN
SELECT  DISTINCT
PLN, DH, PT, PROVIDER, TAX, PROV_NAME,  MEMGRP, MEMSUB, MBR_NAME,
POS, AUDNBR, CLM_ADJ, LN_NR, RCVD_DT, FIRST_DOS, LAST_DOS, CPT, CPT_MOD, 
UNITS, DIAG1, PAID_DT, REV_CDE, BILL_TYPE, FIN_LGL_NBR, PAR, OCC_CD5,
AMT_CLAIMED, AMT_DISALLOW, AMT_DISCOUNT, AMT_DEDUCT, AMT_COPAY, AMT_PAID,
DEN_CDE, DSLW_CDE, DENY_DESC, DSLW_DESC, ADJ_RSN_DESC, REV_DESC, POS_DESC, 
CPT_DESC, DIAG_DESC
FROM v_QI_CLAIMS_FAC
WHERE (@nVALUE  = (MEME_HICN) AND (FIRST_DOS BETWEEN @begDOS AND @endDOS) AND PLN = 'CAID')
OR (@nVALUE = (MEMSUB) AND (FIRST_DOS BETWEEN @begDOS AND @endDOS) AND PLN = 'CAID')
OR (@nVALUE = (MEME_CK) AND (FIRST_DOS BETWEEN @begDOS AND @endDOS) AND PLN = 'CAID')
     ORDER BY AUDNBR, LN_NR, CLM_ADJ
    END
memsub和meme_-hicn中的数据在表中是varchar,meme_-ck是int。查询为memsub和meme_-ck提取数据,但当值来自meme_-hicn时,我得到错误:

将varchar值“558901488A”转换为数据类型int(其中数据值为“558901488A”)时,转换失败

它看起来像是将meme_hicn解释为int,但它应该是varchar


我尝试过各种选择、演员阵容等等,但似乎没有任何效果。

你提到
MEME\u-CK
是一个
INT
,但是你有
@nVALUE=(MEME\u-CK)
,并且
@nVALUE
是一个
VARCHAR
。尝试使用
@nVALUE=Convert(VARCHAR(10),MEME\CK)
.OMG,我从来没有想过要转换MEME\u CK,因为它返回了该字段的值。我猜这是因为一旦它将MEME\u CK读取为INT,它会自动将MEME\u CK也处理为INT。非常感谢!!@Kimo,任何时候你使用varchar和INT进行隐式转换,数据库引擎都会尝试转换这两个sid将es转换为int。