【发布时间】:2014-04-09 18:37:46
【问题描述】:
CREATE PROCEDURE [dbo].[GetIssuedGatePassByGatepassType]
(
@GatePass_Type int,
@plant int
)
AS
SET NOCOUNT ON;
SELECT
GatePass_Type, Batch_No, Issued, Batch_Id
FROM
GatePass_Batch
WHERE
(Issued = 0)
AND (GatePass_Type = @GatePass_Type)
AND Location_Id = @plant
ORDER BY
CAST(Batch_No AS INT) ASC
Batch_no 在表中属于数据类型varchar
这给了我一个类似
的错误将 varchar 转换为数据类型 int 失败
请回答
【问题讨论】:
-
为什么要将它转换为 int in order by 子句只需使用 order by 子句而不使用 CAST 函数。
-
Bad habits to kick : choosing the wrong data type - 你应该始终使用最合适的数据类型 - 毕竟这就是它们的用途!如果
batch_no是一个数字 - WHY 它不是存储为INT或DECIMAL(10,2)还是其他什么?为什么VARCHAR- 完全没有意义。 .... -
Issued、GatePass_Type和Location_Id列的数据类型是什么?其中任何一个也可能会强制隐式转换为int。 -
+1 @marc_s 的评论。如果您有一个
VARCHAR列,那么最终有人会在其中输入文本是否喜欢它,如果您假设它只包含数字,那么您的转换将失败。我的猜测是您在Batch_No字段中有流氓文本数据。 -
@M.Ali:对存储为 VARCHAR 的数字进行排序并不总是与存储为 INT 数据类型的数字相同。例如:1、10、100、11、12、2等……
标签: sql-server-2008