我是SQL Server的新手。我有一点问题,我无法查找。关键是我无法在我的列STATEID
中获取数据的顺序,我想从最小到最大订购它。我使用的是ORDER BY
或ASC
,但它无效。在其他方面,我可以从列STATEID
中获得最小到最大的确切序列。我正在使用SQL Server 2008.
这是我的代码示例。
ALTER PROCEDURE [dbo].[basicGatherSelect]
@StateID nvarchar(5),
@Name nvarchar(50)
AS
BEGIN
BEGIN TRANSACTION
SET NOCOUNT ON;
SELECT
StateID, name
FROM
tblState
ORDER BY
STATEID ASC
IF @@error <> 0
BEGIN
ROLLBACK
RAISERROR ('PROBLEM', 16, 1)
RETURN
END
COMMIT
END
结果:
答案 0 :(得分:1)
试试这个:
ALTER PROCEDURE [dbo].[basicGatherSelect]
@StateID nvarchar(5),
@Name nvarchar(50)
AS
BEGIN
BEGIN TRANSACTION
SET NOCOUNT ON;
SELECT
StateID, name
FROM
tblState
ORDER BY
CAST(STATEID AS INT) ASC
IF @@error <> 0
BEGIN
ROLLBACK
RAISERROR ('PROBLEM', 16, 1)
RETURN
END
COMMIT
END
答案 1 :(得分:0)
如果您无法控制参数的来源(因此您无法将其更改为int)
按字母顺序排序会使其将字符处理的其他字符视为一种考虑因素。
如果你的东西有21件......它会......
1,10,11,12 ....等,2,20,21,3,4 ......等等。
你总是可以将一个强制转换为int来进行排序(假设ID总是一个数字):
ORDER BY
CAST(@StateID AS INT) ASC
关于这篇文章的更多信息:SQL ORDER chars numerically