SQL:如何复制同一个表中的行,更新其中一个字段而不列出所有字段

时间:2011-01-03 11:29:57

标签: sql ms-access-2010

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

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

2 个答案:

答案 0 :(得分:0)

我在这个问题中找到了一个有趣的替代方案,使用临时表 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字段和一个附件字段,我怀疑这是错误的原因。但我需要保留它们......:/

答案 1 :(得分:0)

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

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

HTH!