【问题标题】:Do Temporary Stored Procedures Use Global Temporary Tables?临时存储过程是否使用全局临时表?
【发布时间】:2015-12-11 01:49:46
【问题描述】:

我正在尝试解决我在尝试插入/追加到 Azure SQL 数据库时遇到的错误。

我得到的错误:

错误:在 DB 中写入数据 (353):在“NoTable”上运行 PreSQL 时出错:Microsoft OLE DB Provider for SQL Server:只有在列列表时才能指定表“CHART”中标识列的显式值已使用且 IDENTITY_INSERT 为 ON。\42000 = 8101

我用来执行插入的工具是 Alteryx 10.0,它是一个出色的数据混合和高级分析工具,特别是 Write Data In-Database 工具。

我从星期六早上开始就一直在尝试解决这个问题,但没有成功。今天晚上我决定查看 OLE 连接字符串,看看它是否为我提供了任何线索。我在连接字符串中遇到了 Use Procedure To Prepare 参数。文档表明此参数指示如何创建和释放临时存储过程。有两种可能的设置:

  1. 准备好命令时会创建一个临时存储过程。释放会话时会删除所有临时存储过程。

  2. 准备好命令时会创建一个临时存储过程。当命令未准备好、指定新命令或释​​放所有应用程序对该命令的引用时,该过程将被删除。

问题一:临时存储过程是否依赖全局临时表?如果是这样,这是否是我的错误的原因,因为 Azure SQL 数据库不支持全局临时变量?

问题 2:Use Procedure To Prepare 参数是可选的吗?如果这确实是我遇到的问题,希望我可以从连接字符串中删除此参数并避免创建全局临时表。

编辑:尽管错误消息表明我正在尝试插入标识列,但我没有。我相信指定“No Table”的错误消息的开头是系统正在寻找global temporary table that is not supported by Azure SQL的提示

提前感谢您的意见。

【问题讨论】:

  • 那么“Prepare 使用程序”设置为 1 还是 2 是什么?对于较旧的 OLE,它也是一个选项 0,即“准备命令时不会创建临时存储过程”,请参阅 support.microsoft.com/en-us/kb/193135
  • 原来设置为1,我相信这是默认值,然后我从连接字符串中删除它,但它仍然产生相同的错误消息。也许当它从字符串中删除时,它默认为默认设置 1。我会尝试 0 看看会产生什么。
  • @Dijkgraaf 我尝试将参数设置为零,但仍然收到错误消息。所以,现在我收到了 1 和 0 的错误消息。我也将尝试 2 以追求所有选项。

标签: sql-server azure oledb azure-sql-database alteryx


【解决方案1】:

回答

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“CHART”中的标识列指定显式值。

该错误消息暗示您正在尝试将INSERT 数据放入CHART 表中的IDENTITY 列。它还提出了一个解决方案。包括一个列列表并打开标识插入。你可以这样做:

SET IDENTITY_INSERT CHART ON;

INSERT CHART(column1, column2)
VALUES (value1, value2);

SET IDENTITY_INSERT CHART OFF;

或者,您可以不尝试插入标识值并将其留给 SQL Server。 IDENTITY 列是 SQL Server 自动计算的值。如果我们想手动设置它,我们需要明确说明,如果我们不想手动设置它,那么我们只是不在VALUES列表中包含一个值。

另见

IDENTITY (Property)

SET IDENTITY_INSERT

【讨论】:

  • 我怀疑您引用的错误消息部分是红鲱鱼,因为我没有插入身份列。感谢您的意见。
  • 你怎么知道你没有插入身份列?
  • 也许我没有,但我创建了要插入的记录并且它不包括标识列,正如您在回答中建议的那样,我将它留给 SQL 为我做。
  • 如果您既是 1. 使用列列表,又是 2. 确保该列表中没有 IDENTITY 列,那么您是对的,这似乎是一条红鲱鱼。也就是说,奇怪的是该错误消息会突然出现。
  • 您对错误消息的“无表”部分有何看法。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2015-02-15
  • 2011-01-17
相关资源
最近更新 更多