我想知道是否有人可以帮助我。我正在创建一个简单的脚本,我想将一个数字自动递增到一个数字为7 0的字段。
示例:00000001
这是我的脚本:它是一个小的更新脚本</ p>
DECLARE @EDI NVARCHAR(55)
SET @EDI=0000000
UPDATE TESTER11111
SET @EDI=EDI=@EDI+1
WHERE ssq='education'
而不是将数字递增为00000001,00000002。 它递增为1,2,3等
我做错了什么?我如何插入那些领先的7 0?EDI是我插入增量的列。
答案 0 :(得分:6)
你做不到。就数据库而言,01与1相同。如果你不想引导零,那么当你从数据库中提取数据时,你将不得不构造一个用零填充的字符串。
修改强>
通常我会在应用程序中进行格式化,但有时候我必须在数据库中进行格式化。这是一个例子,在较新的版本中可能有更好的解决方案,但这就是我使用的。
SELECT REPLACE(STR(5, 8), ' ', '0')
答案 1 :(得分:3)
在表格中放置“常规”INT IDENTITY
列,并有一个计算列来处理其他工作:
CREATE TABLE dbo.IDTest
( ID INT IDENTITY(1,1) PRIMARY KEY,
FormattedID AS RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED
)
现在,您的表格将包含以下值:
ID FormattedID
1 00000001
2 00000002
..
42 00000042
..
123 00000123
此计算列是持久的,例如如果需要,你也可以索引它。
答案 2 :(得分:1)
这在您的业务逻辑(php,asp,coldfusion或其他)中更好地处理。增量适用于整数,而不是字符串。否则,它必须通过整个字母表。
答案 3 :(得分:1)
让表增加(并且只存储整数),但我没有理由不考虑不继续格式化select语句;固定数字格式与业务逻辑一样多的数据
SELECT Right(Replicate('0',8)+Convert(nvarchar(8),EDI),8)
编辑:如果您必须保存格式化的值:
DECLARE @EDI NVARCHAR(55)
SET @EDI=0
UPDATE TESTER11111
SET @EDI=EDI=Right(Replicate('0',8)+Convert(nvarchar(8),@EDI+1),8)
WHERE ssq='education'
答案 4 :(得分:-1)
试试这个
UPDATE TESTER11111
SET @EDI='0000000'+''+1
WHERE ssq='education'
选择“0000000”++(自动编号)
O / P 00000001