【问题标题】:SELECT SCOPE_IDENTITY performs differentlySELECT SCOPE_IDENTITY 执行不同
【发布时间】:2013-11-11 14:46:18
【问题描述】:

SCOPE_IDENTITY() 返回NULL 的另一个问题

情况如下:我有一台运行 Windows Server 2012R2 和 SQL Server 2012 的虚拟机。在我自己的机器上,我使用相同的 SQL Server 和 Windows 8.1

在 Management Studio 中执行以下查询:

INSERT INTO [DB1].[Extract].[Log]([Package], [StartTime])
VALUES ('Bla', GETDATE())

SELECT SCOPE_IDENTITY() AS 'Identity';

返回在我的 PC 上插入的行的标识 BUT 在虚拟机中返回 NULL(仍然插入该行),因此无法执行 SSIS 包。

这到底是怎么回事?会不会是对数据库的一些额外权限?

我不能错过说“它可以在我的机器上运行!” :)

【问题讨论】:

  • 只是为了确定... DB1.Extract.Log 在虚拟机上定义了一个标识列?
  • 要明确 - 对您的本地计算机运行 SSIS 包(使用真实数据库的虚拟/适当减少的副本)也可以工作,还是也会失败?
  • 是的,它确实有效。一切都在我的机器上运行:D
  • 顺便说一句,您应该开始使用输出子句。 Scope_identity 存在输出没有的并行性问题。
  • @HLGEM 感谢您的建议。我也会调查的。

标签: sql sql-server-2012 ssms


【解决方案1】:

SCOPE_IDENTITY() 如果插入的表没有IDENTITY 列,将返回 null - 因此,值得在它不工作的机器上仔细检查您的架构,以确保实际上存在, IDENTITY 列。

【讨论】:

  • 好吧,这真的很奇怪。我确实在 VM 数据库中添加了一个 IDENTITY 列,它可以工作!但是我的 PC 上的数据库中没有身份列,它仍然有效。 (三重检查它)。这很奇怪......
  • 对那些家伙有什么想法吗?
  • @Pepys - 你得到的值是你插入的最后一个东西确实有一个IDENTITY...
【解决方案2】:

您是在服务器之间还原数据库,还是只是通过查询或 SSIS 包将数据复制到一台服务器上的新表中?

【讨论】:

  • 我刚刚复制了它。在放入虚拟机之前,我会在自己的电脑上完成所有操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多