Sql server 查询优化:在修改一个或几个列后,将表中的几个RAW插入到同一个表中:
嗯,我需要在表(DBO.ORDERDATA)中插入一些行,并对一列(单价)进行一些数学修改(这里是-1的乘法),保持其他列的值不变 以下是代码:考虑到Northwind DB:Sql server 查询优化:在修改一个或几个列后,将表中的几个RAW插入到同一个表中:,sql-server,sql-server-2008,Sql Server,Sql Server 2008,嗯,我需要在表(DBO.ORDERDATA)中插入一些行,并对一列(单价)进行一些数学修改(这里是-1的乘法),保持其他列的值不变 以下是代码:考虑到Northwind DB: CREATE TABLE DBO.ORDERDATA ( OrderID INT NOT NULL, ProductID INT NOT NULL, UnitPrice MONEY NOT NULL, Quantity SMALLINT NOT NULL, Discount REA
CREATE TABLE DBO.ORDERDATA
(
OrderID INT NOT NULL,
ProductID INT NOT NULL,
UnitPrice MONEY NOT NULL,
Quantity SMALLINT NOT NULL,
Discount REAL NOT NULL
)
INSERT INTO DBO.ORDERDATA
SELECT * FROM DBO.[Order Details]
插入代码如下:
INSERT INTO DBO.ORDERDATA (OrderID, ProductID, UnitPrice, Quantity, Discount)
SELECT
OrderID, ProductID, UnitPrice * -1, Quantity, Discount
FROM
DBO.ORDERDATA
WHERE
OrderID = 10530
由于许多关键约束,我逃过了内置DBO。[订单详细信息]表,我有点懒;)
最后,除了上面的插入脚本,我不需要指定所有列的名称。请注意,在某些情况下,一列可能是标识列
所有的答案和意见将不胜感激 如果OrderID或OrderID和ProductID的组合是PK,则复制PK的插入将失败,并违反PK约束。您正在尝试插入10530,它已经存在 如果OrderID是一个标识自动增量字段,则应执行以下操作,并将创建一个新的OrderID值:
INSERT INTO DBO.ORDERDATA(ProductID,UnitPrice,Quantity,Discount)
SELECT ProductID,UnitPrice*-1,Quantity,Discount FROM DBO.ORDERDATA
WHERE OrderID=10530
您可能希望避免处理关键约束,但它们实际上告诉您有关此数据的一些重要信息。例如,如果OrderID和ProductID的组合是主键,这意味着该表应该只有一条记录具有该键值组合。您不应该希望以这种方式插入副本
您试图插入副本的原因是什么?如果您正试图实现此订单上的“信用”,那么您可能需要考虑一些不破坏数据完整性的实现方法。钥匙在那里有很好的理由。例如,您可以在复合键中添加一个“transactiontype”字段,如果这是对该数据含义的最佳描述
同样的情况也适用于在不命名所有字段的情况下插入记录。你可以避免这样做,但你为什么要这样做?字段名对于插入的完整性很重要
如果列不在列列表中,则数据库引擎必须能够
根据列的定义提供一个值;否则
无法加载行。数据库引擎自动提供
如果列: