如何在SQL Server中插入前导零

Mat*_*nto 4 sql sql-server-2005 insert

这是使用前导零选择的代码:

SELECT RIGHT('00000'+ CONVERT(VARCHAR,Asset_No),6) 
  FROM schemaAsset.SystemDefined
Run Code Online (Sandbox Code Playgroud)

如何使用前导零将值插入Asset_no列?

例如我只在"Asset_no"列中插入"1",但在代码中,它将插入"000001".而且当我插入两个数字如26时,它将插入为"000026".长度不会改变.这可能在SQL Server中吗?

Aar*_*and 6

一种方法是使用INSTEAD OF触发器.

USE tempdb;
GO

CREATE TABLE dbo.whatever
(
  Asset_No VARCHAR(6)
);
GO

CREATE TRIGGER dbo.fix_whatever
ON dbo.whatever
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;
  INSERT dbo.whatever(Asset_No /*, other columns */)
    SELECT RIGHT('000000' + CONVERT(VARCHAR(6), Asset_No), 6)
      /*, other columns */
    FROM inserted;
END
GO

INSERT dbo.whatever(Asset_No) SELECT '22';
GO

SELECT Asset_No FROM dbo.whatever;
GO
Run Code Online (Sandbox Code Playgroud)

结果:

Asset_No
--------
000022
Run Code Online (Sandbox Code Playgroud)

  • [而不是触发器](http://msdn.microsoft.com/en-us/library/ms179288(v = sql.105).aspx)允许您在*之前查看正在插入/更新/删除的数据*它发生了,所以你可以做一些事情,比如操纵数据甚至取消声明.有些人会告诉你,没有用而不是触发器,但它们绝对有一个位置 - 它们比后触发器更少的资源密集,特别是在你必须回滚的情况下.也就是说,只有在你不能直接修改insert语句时才能使用这个触发器,这就是我读你的问题的方法. (2认同)