我们有一个Oracle应用程序,它使用标准模式来填充代理键。我们有一系列外部行(具有代理键的特定值)和其他具有内在值的行。 我们使用以下Oracle触发器片段来确定如何处理插入时的Surrogate键:
IF :NEW.SurrogateKey IS NULL THEN
SELECT SurrogateKey_SEQ.NEXTVAL INTO :NEW.SurrogateKey FROM DUAL;
END IF;
如果提供的代理键为null,则从指定的序列中获取值,否则将提供的代理键传递给该行。
我似乎无法找到一个简单的方法来做到这一点是T-SQL。有各种各样的方法,但没有一种方法使用像Oracle和其他符合SQL-92的DB这样的序列生成器的概念。
有人知道在SQL Server T-SQL中执行此操作的有效方法吗?顺便说一下,如果有任何帮助,我们正在使用SQL Server 2008。
答案 0 :(得分:2)
你可能想看看IDENTITY。这将为您提供一个列,在插入行时将确定该值。
这可能意味着你必须插入行,然后使用SCOPE_IDENTITY()确定之后的值。
还有一篇关于在SQL Server中模拟Oracle序列的文章:http://www.sqlmag.com/Articles/ArticleID/46900/46900.html?Ad=1
答案 1 :(得分:0)
身份是一种方法,尽管它会在每个表级别生成唯一标识符。
另一种方法是使用唯一标识符,特别是使用NewSequantialID(),随后生成的id总是大于最后一个。这种方法的问题是你不再处理整数。
模拟oracle方法的最接近的方法是使用一个带有计数器字段的单独表,然后编写一个用户定义的函数来查询该字段,递增它并返回该值。
答案 2 :(得分:0)