【问题标题】:Finding MAX value of data type Varchar查找数据类型 Varchar 的 MAX 值
【发布时间】:2016-12-14 08:42:53
【问题描述】:

首先,我有一个表tblSample,其中ID 作为数据类型INT 的列。为了为每笔交易自动生成 ID,我创建了一个存储过程:

DECLARE @Id INT

SELECT @Id = MAX(Id) 
FROM tblSample 

IF @Id IS NULL
BEGIN
    SELECT 0 as Id
END
ELSE 
    SELECT MAX(Id) as ID FROM tblSample

在这里你观察到如果ID 没有行MAX(Id)=0 然后返回 0 或者返回 MAX(ID) 值,以便下一次插入将大于 max(ID)。

没关系,但现在我的列 ID 的数据类型为 VARCHAR 我必须进行类似的操作,我该怎么做?

【问题讨论】:

  • 让我清楚地解释一下,例如有一个名为“X”的列,用户输入 x 值为 2,这样将向用户显示 2 行和一些列,用户在点击时输入数据提交这两行应该分配相同的ID
  • 同样的逻辑也应该适用于 VARCHAR 类型。上面的代码有什么问题??
  • 是的,我很困惑 MAX(varchar) 和 VARCHAR(max)...谢谢

标签: sql sql-server sql-server-2008 sql-server-2008-r2


【解决方案1】:

代码看起来不错,因此它也应该与 VARCHAR 一起使用,但我的建议是也使用具有相同数据类型的存储变量,这样它就不会在操作中的任何地方发生冲突:

DECLARE @Id VARCHAR(10)

【讨论】:

【解决方案2】:

我认为你可以使用MAX(CAST(varcharcolumn AS Int))

【讨论】:

    【解决方案3】:
    DECLARE @Id INT
    SELECT @Id=MAX(Id) FROM tblSample 
    IF @Id IS NULL
    BEGIN
     SELECT 'Your_VarCharValue' + CAST(0 AS VARCHAR) as Id
    END
    ELSE 
     SELECT 'Your_VarCharValue' + CAST(MAX(Id) AS VARCHAR) as ID FROM tblSample
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 2010-12-13
      • 2013-11-12
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多