1

我猜答案是“不”,因为这看起来很荒谬,但我有一种罕见的情况需要发生这种情况:

给定一个包含三个字段的表:

ID, PK, smallint, not null
Code, Varchar(5), not null
Name, VarChar(50), not null

我可以使用 INSERT 语句将 ID 字段神奇地插入到 CODE 中吗?

INSERT INTO MyTable (Code, Name)
    VALUES (CAST([ID's new Value] AS VARCHAR(5)),'New Name')

注意: 对表结构(或数据库)的更改将是多余的。我想通过在存储过程的末尾附加它来完成。

4

3 回答 3

1

完成此操作的方法是使用数据库触发器:触发器作为插入语句的结果触发,因此它具有插入到表中的值。然后它可以进行更新。

至少,这就是您在 Oracle 中可以做的事情。我不知道 SQL-Server 触发器给你多少控制,或者什么时候给一个标识字段一个值,但这里是文档:http: //msdn.microsoft.com/en-us/library/ms189799.aspx

于 2012-09-04T22:02:27.663 回答
1

如果你有一个身份并且这不是你每次都做的事情(当触发器最有意义的时候),这不是很容易做到的。基本上你所做的就是在 Code 字段中插入一个假值(因为它是必需的),然后输出插入表的 id 值,然后用 ID 更新表。当然(与任何多语句操作一样,您应该使用 try-catch 和显式事务,如果任何一个操作失败,则回滚所有操作)。

DECLARE @output TABLE (Id INT))
INSERT INTO MyTable (Code, Name) 
OUTPUT Inserted.ID INTO @output
    VALUES ('test','New Name') 

UPDATE m
SET code = o.Id
FROM    Mytable m
JOIN @output o ON m.Id = o.id
于 2012-09-04T22:11:51.160 回答
0

您可以考虑使用 AFTER INSERT 触发器为您复制值。

http://msdn.microsoft.com/en-us/library/aa258254(v=sql.80).aspx

于 2012-09-04T22:01:35.423 回答