Je suppose que la réponse est «non» parce que cela semble absurde, mais j'ai une situation rare où cela doit se produire:
Étant donné une table avec trois champs:
ID, PK, smallint, not null Code, Varchar(5), not null Name, VarChar(50), not null
Puis-je magiquement insert le champ ID dans CODE avec une instruction INSERT?
INSERT INTO MyTable (Code, Name) VALUES (CAST([ID's new Value] AS VARCHAR(5)),'New Name')
REMARQUE: les modifications de la structure de la table (ou de la database) seraient excessives. Je veux accomplir en l'ajoutant à la fin d'une procédure stockée.
Si vous avez une identité et que ce n'est pas quelque chose que vous faites à chaque fois (quand un triggersur a le plus de sens), ce n'est pas très simple à faire. Fondamentalement, ce que vous faites est d'insert une fausse valeur dans le champ Code (parce que c'est nécessaire), puis de sortir la valeur d'identification de la table insérée, puis de mettre à jour la table avec l'ID. Bien sûr (comme pour toute action multi-états, vous devez utiliser les transactions try-catch et explicite, en annulant toutes les actions si une action échoue).
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
La façon dont vous accomplissez ceci est avec un triggersur de database: le triggersur se triggers à la suite de l'instruction d'insertion, donc il a la valeur insérée dans la table. Il peut ensuite faire une mise à jour.
Au less, c'est ce que vous pouvez faire dans Oracle. Je ne sais pas combien de contrôle un triggersur SQL-Server vous donne, ou quand un champ d'identité est donné une valeur, mais voici le doc: http://msdn.microsoft.com/en-us/library/ms189799.aspx
Vous pouvez envisager d'utiliser un triggersur AFTER INSERT pour copyr la valeur pour vous.
http://msdn.microsoft.com/en-us/library/aa258254(v=sql.80).aspx