1

您好,我搜索了这个问题的答案,但在这里没有找到任何答案。我正在使用 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 行的方法,而只列出我想要更改的那个。(我想在同一张表中保留以前修订的副本)

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

4

2 回答 2

0

我在这个问题中找到了一个有趣的替代方法,使用带有唯一索引的临时表 SQL 克隆记录

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 字段和一个附件字段,我怀疑这是导致错误的原因。但我需要保留它们......:/

于 2011-01-03T12:38:25.753 回答
0

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

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

于 2011-01-03T12:40:43.023 回答