【问题标题】:Is there any way to safely run SELECT INTO?有什么方法可以安全地运行 SELECT INTO?
【发布时间】:2013-09-16 02:16:37
【问题描述】:

我有一个将 SELECT INTO 运行到表中的脚本。据我所知,没有其他过程可能同时引用/修改此表。但是,偶尔会出现以下错误:

在创建目标表后架构发生了变化。重新运行选择 进入查询。

什么会导致这个错误,我该如何避免?

我做了一些谷歌搜索,this link 建议如果没有一些疯狂的 try-catch-retry 逻辑,就不能安全地使用 SELECT INTO。真的是这样吗?

我使用的是 SQLServer 2012。

【问题讨论】:

  • 在您的链接中看起来很全面。如果您不想要重试代码,那么在源表上获取共享表锁定的其他选项呢?
  • 是否有任何原因(除了节省一两分钟写出语句)您不能使用CREATE TABLE 语句显式创建表,然后使用INSERT INTO Table (columns) SELECT ...?我认为这可以解决您的问题,SELECT .. INTO .. 可以为临时脚本节省大量时间,但我想不出在生产代码中使用它的任何情况。
  • 虽然我能想到在生产代码中使用它的情况,但我主要同意 Gareth,如果在开发时列不可知,您始终可以将其构建和执行为动态 sql .

标签: sql sql-server select-into


【解决方案1】:

除非您真的事先不知道字段和数据类型,否则我建议您先创建表,然后使用 Insert 语句添加数据。在您的链接中,David Moutray 提出了同样的建议,这是他的示例代码逐字逐句:

CREATE TABLE #TempTableY (ParticipantID  INT  NOT NULL);

INSERT #TempTableY (ParticipantID)
SELECT ParticipantID
FROM   TableX;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2010-11-09
    • 1970-01-01
    • 2019-05-18
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多