Sql server 2008 转换varchar值时转换失败';蓝色';在存储过程sql server中删除数据类型int

Sql server 2008 转换varchar值时转换失败';蓝色';在存储过程sql server中删除数据类型int,sql-server-2008,Sql Server 2008,我正在尝试创建一个存储过程。但是它抛出了“将varchar值“Blue color”转换为数据类型int时转换失败”错误。我不知道哪里出错,请帮助我 ALTER PROCEDURE [dbo].[GetPerDiem] @KeyWord varchar(10) AS BEGIN set nocount on IF @KeyWord=1 BEGIN Select City as 'Primary Destination',LocationDefined as [(

我正在尝试创建一个存储过程。但是它抛出了“将varchar值“Blue color”转换为数据类型int时转换失败”错误。我不知道哪里出错,请帮助我

ALTER PROCEDURE [dbo].[GetPerDiem] 

    @KeyWord varchar(10)


AS
BEGIN
set nocount on



 IF @KeyWord=1
 BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Jan,Meals as 'Meals & Inc. Exp.**'  from PerDiem
    END 
    ELSE IF @KeyWord=2
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Feb,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=3
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Mar,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=4
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Apr,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=5
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,May,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=6
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Jun,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=7
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,JUl,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=8
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Aug,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=9
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Sep,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=10
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Oct,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    Else IF @KeyWord=11
    BEGIN
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Nov,Meals as 'Meals & Inc. Exp.**' from PerDiem
    END
    ELSE IF @KeyWord=12    
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Dec,Meals as 'Meals & Inc. Exp.**' from PerDiem
    ELSE
    Select City as 'Primary Destination',LocationDefined as [(County 2,3)],County,Oct,Nov,Dec ,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Meals as 'Meals & Inc. Exp.**' from PerDiem 



    where [FiscalYEAR] =2015
    and [state] like '%'+@KeyWord+'%'
    or [City] like '%'+@KeyWord+'%'
    or [Zip] like '%'+@KeyWord+'%'
    or [County] like '%'+@KeyWord+'%'


END

正如JamesZ在评论中所说,您已经将参数“@KeyWord”声明为
VARCHAR(10)
,但将其值与IF-Else中的整数进行比较,比如
IF@KeyWord=1
,这会给您带来错误

总之,您的逻辑也不适合SQL查询。我认为您希望根据参数选择不同的月份,因此存储的进程可以是:

ALTER PROCEDURE [dbo].[GetPerDiem] 

    @KeyWord INT


AS
BEGIN
set nocount on



 IF @KeyWord=1
 BEGIN
    Select City as 'Primary Destination',
         LocationDefined as [(County 2,3)],
         County,
         Month=CASE 
            WHEN @KeyWord=1 THEN 'Jan'
            WHEN @KeyWord=2 THEN 'Feb'
            WHEN @KeyWord=3 THEN 'Mar'
            WHEN @KeyWord=4 THEN 'Apr'
            WHEN @KeyWord=5 THEN 'May'
            WHEN @KeyWord=6 THEN 'Jun'
            WHEN @KeyWord=7 THEN 'Jul'
            WHEN @KeyWord=8 THEN 'Aug'
            WHEN @KeyWord=9 THEN 'Sep'
            WHEN @KeyWord=10 THEN 'Oct'
            WHEN @KeyWord=11 THEN 'Nov'
            WHEN @KeyWord=12 THEN 'Dec'
            ELSE 'Oct,Nov,Dec ,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep'
         END
         Meals as 'Meals & Inc. Exp.**'  
   from PerDiem        
    where [FiscalYEAR] =2015
     and [state] like '%'+@KeyWord+'%'
      or [City] like '%'+@KeyWord+'%'
      or [Zip] like '%'+@KeyWord+'%'
      or [County] like '%'+@KeyWord+'%'


END


最好有一个Varchar参数
@month Varchar(100)
&使用if-else在select循环外指定其相应的月份值&在select中使用该单时间计算变量。

您给过程的输入是“蓝色”吗?您将@keyword定义为nvarchar,但您将其与数字进行比较,就像它是月份数字一样。是否需要另一个变量,或者应该是='1'?