【问题标题】:SQL: How to copy a row in the same table updating one of the fields WITHOUT listing all fieldsSQL:如何在同一个表中复制一行更新其中一个字段而不列出所有字段
【发布时间】:2011-06-02 19:31:54
【问题描述】:

你好 我搜索了这个问题的答案,但在这里没有找到任何答案。 我正在使用 Access 2010。 基本上,我有一个带有报告的表格,并且报告有一个修订号。 我找到了一个关于如何复制字段并只更新其中一个的答案,但它看起来有点像这样:

INSERT INTO reports (fieldA, fieldB, fieldC, revision, fieldD, fieldE)
SELECT  fieldA, fieldB, fieldC, 2, fieldD, fieldE
FROM reports
WHERE <somecondition to select which report to copy>

问题是我有很多字段,所以我想要看起来更像这样的东西:

INSERT INTO reports 
SELECT  *, revision=2
FROM reports
WHERE <somecondition to select which report to copy>

我知道代码不正确;这只是为了描述我想要的。例如,一种没有列出所有字段的巨大 SQL 行的方法,而只列出我想要更改的那个。 (我想在同一张表中保留以前修订的副本)

提前感谢任何可以提供帮助的人:)

【问题讨论】:

    标签: sql ms-access-2010


    【解决方案1】:

    我很确定您不能在 MS Access 或任何其他类型的 SQL 中执行此操作。正如您可能已经知道的那样,您可以做的是使用存储过程(在 Access 中称为存储查询),它将您的修订号和要复制的报告的 id(或其他一些 WHERE 条件)作为参数。这样,您仍然必须指定所有字段,但您只需在数据库中而不是在代码中执行一次。一个例子在这里:

    http://www.stardeveloper.com/articles/display.html?article=2001050101&page=1

    HTH!

    【讨论】:

    • 是的,但我没有考虑这个解决方案,因为我特别不想列出这些字段 - 我正在修改一个现有的数据库(看起来很糟糕 - 很多重复,只使用表作为存储;它们之间没有任何关系...)并且正在努力使其更清洁;它已经有很长一段时间没有修改过了,因为办公室里没有人知道这样做。所以我试图以一种允许他们制作小型模组的方式来做这件事——比如添加一个字段——而不必对代码进行排序。
    • 啊,我明白了。那么,你自己的诱人解决方案听起来不错,我猜?您将需要一个在列更改时仍然有效的解决方案,所以我猜是这个或某种序列化......它缺少什么?
    • 我认为这个诱人的解决方案是可以的 - 我事先没有考虑过它并且正在寻找紧凑的东西......但是,有时我们不能没有更多的行。
    【解决方案2】:

    我在这个问题中找到了一个有趣的替代方案,使用临时表 SQL clone record with a unique index

    DROP TABLE #tmp_MyTable
    
    SELECT * INTO #tmp_MyTable
    FROM MyTable
    WHERE MyIndentID = 165
    
    ALTER TABLE #tmp_MyTable
    DROP Column MyIndentID
    
    INSERT INTO MyTable
    SELECT * 
    FROM #tmp_MyTable
    

    我也可以这样做,删除主键并更新修订版,然后将其复制回我的表中。

    不是我正在寻找的解决方案,而是另一种方法。

    编辑:

    尝试了这个解决方案但没有成功: VBA 告诉我“SELECT INTO 指令不允许具有多个值的字段(运行时错误 3838)”

    我有一个 OLE 字段和一个附件字段,我怀疑这是导致错误的原因。但我需要保留它们...:/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多