将值插入旧标识字段

时间:2015-01-13 14:31:47

标签: sql sql-server

我有一个有标识列的表。 出于多种原因,我们不得不从该列中删除标识。 我有一个系统,通过旧方法向该表插入一个值,为标识列传递null。 是否有一种简单的方法来定义标识列以便在传递给它时接收值,并且如果传递null值,则使该表为该表中未找到的该字段设置唯一值(表现得像身份一样。)

我的意思是,如果有价值,请插入。 如果系统试图插入null就像一个身份。

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于这种情况,触发器似乎是一个不错的选择,但是有很多方法可以解决这种情况。

下面的示例创建一个INSTEAD OF插入触发器,用于获取应该插入的列,如果ID列为空,则通过函数生成新值。

CREATE TRIGGER myTrigger ON myTable
INSTEAD OF INSERT
AS
    INSERT INTO myTable (myIDcolumn, anotherColumn)
    SELECT COALESCE(myIDColumn, dbo.SomeMethodToCreateID), anotherColumn
    FROM inserted

SomeTheodToCreateID函数如何工作取决于您。您可以做的一件事是更改SELECT以组合max plus row_number:

SELECT (COALESCE(myIDColumn, 
  (SELECT MAX(myIDColumn) FROM myTable) + ROW_NUMBER() OVER(ORDER BY anotherColumn)
)
...

答案 1 :(得分:0)

试试这个

DBCC CHECKIDENT('[dbo]。[Customers]',RESEED,1)