【发布时间】:2010-07-25 18:55:22
【问题描述】:
我有以下 SQL:
ALTER PROCEDURE [dbo].[SP_Products_GetList]
@CatID int,
@CatName int,
@SortBy varchar(50),
@SortType varchar(50)
AS
SELECT Products.ProductID, ProductName, MAX(Price) Price FROM Products
INNER JOIN ProductCategory
on Products.ProductID = ProductCategory.ProductID
INNER JOIN (
SELECT * FROM Categories
WHERE
( @CatID is null or @CatID = CatID ) and
( @CatName is null or @CatName = CatName )
) Categories
on ProductCategory.CatID = Categories.CatID
INNER JOIN (
SELECT ProductID, max(Price) Price from Prices WHERE PriceID IN
( SELECT MAX(PriceID) FROM Prices
GROUP BY ProductID , SizeID)
GROUP BY ProductID
) as Prices
on Prices.ProductID = Products.ProductID
GROUP BY ProductName, CatName, Products.ProductID, Price
ORDER BY
CASE @SortType
WHEN 'desc' THEN
CASE @SortBy
WHEN 'ProductID' THEN Products.ProductID
WHEN 'ProductName' THEN ProductName
WHEN 'Price' THEN Price
END
END
执行通过
EXEC [dbo].[SP_Products_GetList]
@CatID = 1,
@CatName = NULL,
@SortType = 'DESC',
@Sortby = 'ProductID'
执行失败
EXEC [dbo].[SP_Products_GetList]
@CatID = 1,
@CatName = NULL,
@SortType = 'DESC',
@Sortby = 'ProductName'
消息 245,级别 16,状态 1,过程 SP_Products_GetList,第 13 行 将 varchar 值“01-My First Tools Diaper Cake”转换为数据类型 int 时转换失败。
当我不区分大小写更改查询并编写简单时:
.....
ORDER BY ProductName
效果很好
为什么要尝试将varchar 转换为int,如错误消息中所示?
【问题讨论】:
-
@Mark:不要问你不想知道答案的问题。
标签: sql-server tsql