我正在寻找遇到的问题的最佳解决方案。
我有几个数据库,我经常将它们对齐以在其中包含相同的数据。在某些引用表中,有“自动递增ID”列,在其他表中,有与这些ID值匹配的列。不幸的是,在源DB上的ID更改后可能像是(10,15,20),而在将其插入到目标表后,它是(1,2,3)。我希望我的模型可以澄清这种情况:
源数据库引用表:
ID_________Name
10_________a
15_________b
20_________c
目标数据库引用表:
ID_________Name
1__________a
2__________b
3__________c
来源情况表:
RefTableID___OtherColumns
10__________a
10__________b
15__________c
15__________d
问题在于,将FactTable迁移到目标数据库后,它与RefTable中的记录不匹配。我有一个想法要添加另一列,该列与ID列相比将是可编辑的。问题是最终用户不应该看到它(这对他没有任何意义),因此它也应该是自动递增的。在这种情况下我应该使用什么:
或者也许有人对如何解决这个问题有更好的主意?
答案 0 :(得分:0)
在SQL Server中,一旦将行插入表中就无法更新标识列。
但是,可以通过为指定表使用set identity_insert
手动插入它的值。
在每个会话中,您只能有一个表,同时将<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:map>
<map>
<item from="13days" to="1week" />
<item from="14days" to="2week" />
<item from="27days" to="3week" />
</map>
</my:map>
<xsl:variable name="vMap" select="document('')/*/my:map/*/*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@maturity[. = document('')/*/my:map/*/*/@from]">
<xsl:attribute name="maturity">
<xsl:value-of select="$vMap[@from = current()]/@to"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
设置为identity_insert
,因此,插入完成后,请务必将其重新设置为on
。
代码可能看起来像这样:
off