在SQL Server中出错“将varchar值'%'转换为数据类型int时转换失败。 [英] Error In sql Server " Conversion failed when converting the varchar value '%' to data type int."

查看:105
本文介绍了在SQL Server中出错“将varchar值'%'转换为数据类型int时转换失败。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请立即帮助我 ......



  ALTER   PROCEDURE  [dbo]。[csp_Objekt_GetAllObjekts] 

@ StreetNo int - 搜索选项
@ FirstRow Int - - 起始行号
@ LastRow Int - 结束行号
@ SortColumn varchar 30 ), - 排序列名
@ SortOrder < span class =code-keyword> varchar ( 4 - 排序方向(ASC / DESC)


AS
SET NOCOUNT ON
< span class =code-keyword> DECLARE @ OrderBy varchar 40

- 设置排序列和排序零值为空值
IF @ SortColumn IS NULL
SET @ SortColumn = ISNULL( @ SortColumn ' '
IF @ SortOrder IS NULL
SET @ SortOrder = ISNULL( @ SortOrder ' '

- 组合排序列和排序顺序
SET @ OrderBy = @ SortColumn + @ SortOrder

SELECT * FROM

SELECT ROW_NUMBER() OVER ORDER BY

- 将StreetNo排​​序为升序
CASE
WHEN @ OrderBy = ' StreetNoASC' 那么 StreetNo
END ASC
- 将StreetNo排​​序为降序
CASE
WHEN @ OrderBy = ' StreetNoDESC' 那么 StreetNo
END DESC

- 默认按ObjektName排序
CASE
WHEN @ OrderBy = ' ' 那么 ObjektName
END ASC
AS RowNum,

COUNT(*) OVER () AS TotalObjekts,

ObjektId,
ObjektName,
Street,
StreetNo,
Land,
PLZ,
Ort,
CreatedDate ,
IsContactPerson,
IsDocument,
IsPhoto,
注意
FROM
Objekt WITH NOLOCK
WHERE
- 过滤StreetNo
@St reetNo IS NULL @ StreetNo = 0 StreetNo LIKE @ StreetNo + ' %'

AS ObjektsData
WHERE RowNum> = @ FirstRow AND RowNum< = @ LastRow - 仅采用给定的范围记录
SET NOCOUNT OFF

解决方案

你需要使用如下的演员表

 @ StreetNo   IS   NULL    @ StreetNo  =  0   StreetNo  LIKE  cast( @ StreetNo   as   varchar  10 ))+ ' %' 



检查此项SQL小提琴 [ ^ ]


Please Help me immediately bro....

ALTER PROCEDURE [dbo].[csp_Objekt_GetAllObjekts]      
(                                            
		@StreetNo int,                -- Search option 		
		@FirstRow Int,						      -- Starting Row Number
		@LastRow Int,							  -- Ending Row Number
		@SortColumn varchar(30),				  -- Sort Column Name
		@SortOrder varchar(4)					  -- Sort Direction (ASC/DESC)
)

AS
SET NOCOUNT ON
DECLARE @OrderBy varchar(40)

-- Setting Sort Column and Sort Order null for empty value
IF @SortColumn IS NULL
SET @SortColumn=ISNULL(@SortColumn,'')
IF @SortOrder IS NULL
SET @SortOrder=ISNULL(@SortOrder,'')

-- Combining Sort Column and Sort order
SET @OrderBy=@SortColumn+@SortOrder

SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY

-- Sorting StreetNo as Ascending order
CASE
WHEN @OrderBy = 'StreetNoASC' THEN StreetNo
END ASC,
-- Sorting StreetNo as Descending order
CASE
WHEN @OrderBy = 'StreetNoDESC' THEN StreetNo
END DESC,

-- Default Sorting by ObjektName
CASE
WHEN @OrderBy = '' THEN ObjektName
END ASC
) AS RowNum,

COUNT (*) OVER () AS TotalObjekts,

ObjektId,
ObjektName,
Street,
StreetNo,
Land,
PLZ,
Ort,
CreatedDate,
IsContactPerson,
IsDocument,
IsPhoto,
Notice
FROM
Objekt WITH(NOLOCK)
WHERE
-- Filtering StreetNo      
(@StreetNo IS NULL OR @StreetNo = 0 OR StreetNo LIKE @StreetNo + '%')

)AS ObjektsData
WHERE RowNum >=@FirstRow AND RowNum<=@LastRow -- Taking only the given range records
SET NOCOUNT OFF

解决方案

you need to use cast as below

(@StreetNo IS NULL OR @StreetNo = 0 OR StreetNo LIKE cast(@StreetNo as varchar(10)) + '%')


check this SQL Fiddle[^]


这篇关于在SQL Server中出错“将varchar值'%'转换为数据类型int时转换失败。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆