返回首页

自动递增的字段:在SQL Server 2008 |亲爱的朋友们,

有一个表名为tbl_ProductCatg在我的数据库(SQL Server 2008中)
字段ID,代码,描述和一些更多。

id字段是自动增量和我有代码字段中插入这个字段的值。

即如果生成的ID是1,那么代码字段值应插入像0001(四长度格式化),如果ID是77码应该是0077。

为此,我提出的查询,如:插入tbl_ProductCatg(代码,描述)值(右('000'LTRIM(STR(SCOPE_IDENTITY(),1,4)),4),"测试")
此查询在SQL Server查询分析器中运行良好,但如果我写在C#代码中的插图空甚至ID字段更新。

寻找你的一种解决方案
提前感谢
supriya

回答

评论会员:游客 时间:2012/02/07
查看imgsrc=]
米卡Wendelius:可能的原因是,新生成的自动增量值范围之外。例如,你执行INSERT语句,首先,在您的代码生成新的自动增量值(作为一个单独的语句),之后,你执行上面的语句。

SCOPE_IDENTITY调用必须是在同一范围内自动增量值生成。这意味着,在相同的存储过程,函数或批处理。

此外,在我看来,你不应该使用其他一些数据的自动增量值。自动递增仅用于创造独特的,描述性的价值,所以他们不应该有任何其他的意义。串联标识值,将其转换为字符串等,是不正确的方法使用的标识值。例如可以使用SCOPE_IDENTITY将1外国键列值在子表,但也是在这种情况下,该值应该被未修改
评论会员:。阿米尔Mahfoozi 时间:2012/02/07
你可以在C#中没有和让1计算领域做你的工作,
你可以定义代码计算,其计算公式是这样的领域提出:
(串(CONVERT(VARCHAR(最大值),(10000)[ID],0),(2),(4)))
然后你可以使用它,只要你想。你也可以忽略它在插入

请记住这个公式的ID小于10000的是,如果你预测它可能超过10000进一步请更改为1000000到一个适当的例子之一,我们有这个:

(串(转换(数据类型为varchar](最大值),(1000000)[ID],0),(2),(6)))
希望它帮助
评论会员:prakash00060 时间:2012/02/07
{A1}


create trigger update_increment for update as

if not update(incrementID)

  UPDATE tb_users SET incrementID = incrementID + 1

    from inserted WHERE tb_users.id = inserted.id