【发布时间】:2020-12-17 17:28:58
【问题描述】:
我正在为工业环境中的配方管理创建一个 C# Winforms 应用程序。
我创建了一个包含 130 列的 SQL Server 表。该表包含一个名为CheckData(数据类型为Timestamp)的列,我用它来检测对一行所做的更改。
如果我在该表中插入新行,一切正常。我使用的代码是:
INSERT INTO tablename (Column1, column2, column3, column4)
VALUES (value1, value2, value3, value4)
我只是为主要列分配值,其他列获得它们的默认值。我没有为时间戳字段赋值,因为它是由系统编写的。
另外,我想从这个表中复制一行到同一个表中(复制一条数据记录)。
我将源行复制到临时表,删除该临时表中的 ID(主键)和时间戳字段,并尝试将临时表中的唯一行插入到表中。这失败了。
代码如下:
SELECT *
INTO #temptable
FROM tablename
WHERE Recipe_No = 8;
ALTER TABLE #temptable DROP COLUMN ID, CHECKDATA;
ALTER TABLE #temptable REBUILD;
UPDATE #temptable
SET Recipe_No = 9, Recipe_Name = 'Test'
WHERE Recipe_No = 8;
INSERT INTO tablename
SELECT * FROM #temptable;
我不明白通过INSERT INTO xxx (yyy) VALUES (zzz) 和INSERT INTO xxx SELECT * FROM yyy 插入新行之间的区别在哪里。在这两种情况下,我都不会尝试在新行中写入时间戳值。
有人知道我在这里缺少什么吗?
【问题讨论】:
-
什么失败了?你有几笔交易在这里进行。有什么错误吗?
-
INSERT INTO 失败。
标签: sql sql-server insert timestamp