Je veux insert des données dans une table où je ne connais pas la prochaine key unique dont j'ai besoin. Je ne suis pas sûr comment formater ma requête INSERT
sorte que la valeur du champ Key soit 1 supérieure à la valeur maximale de la key dans la table. Je sais que c'est un hack, mais je suis juste en train d'effectuer un test rapide sur une database et je dois m'assurer que j'envoie toujours une key unique.
Voici le SQL que j'ai jusqu'à présent:
INSERT INTO [CMS2000].[dbo].[aDataTypesTest] ([KeyFld] ,[Int1]) VALUES ((SELECT Max([KeyFld]) FROM [dbo].[aDataTypesTest]) + 1 ,1)
quelles erreurs avec:
Msg 1046, niveau 15, état 1, ligne 5 Les sous-requêtes ne sont pas autorisées dans ce context. Seules les expressions scalaires sont autorisées.
- Incrémentation de colonne d'identité SQL Server sans insertion
- Utilisation de @@ identity ou de sortie lors de l'insertion dans la vue SQL Server?
- Augmentation de la valeur alphanumérique dans la fonction définie par l'user
- SQL Server SCOPE_IDENTITY () – security des threads
- Une valeur explicite pour la colonne d'identité dans la table 'COM_MST' ne peut être spécifiée que lorsqu'une list de colonnes est utilisée et que IDENTITY_INSERT est activé
Je ne suis pas en mesure de modifier la table de database sous-jacente. Que dois-je faire pour assurer une insertion unique dans mon code SQL INSERT
?
Vous pouvez utiliser l'autre syntaxe INSERT:
INSERT INTO [CMS2000].[dbo].[aDataTypesTest] ([KeyFld] ,[Int1]) SELECT Max([KeyFld]) + 1, 1 FROM [dbo].[aDataTypesTest]
Désolé, vous ne pouvez pas modifier la database. Tu as raison; c'est un hack.
INSERT INTO [CMS2000].[dbo].[aDataTypesTest] ([KeyFld] ,[Int1]) SELECT Max([KeyFld]) + 1, 1 FROM [dbo].[aDataTypesTest]
Mais pourquoi ne pas utiliser une propriété IDENTITY sur KeyFld puis SCOPE_IDENTITY () ou une clause OUTPUT? (OK, aucun changement de schéma.) Bummer)