Sql server 2008 转换varchar值时转换失败';蓝色';在存储过程sql server中删除数据类型int
我正在尝试创建一个存储过程。但是它抛出了“将varchar值“Blue color”转换为数据类型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 [(
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'?