Je crée un SQL Insert pour remplir ma table. J'ai un ID généré unique dans une table que je voudrais utiliser dans une autre table pour ma jointure. Est-ce possible?Puis-je attribuer une variable dans une procédure stockée SQL?
.NET MVC -
using (SqlConnection connect = new SqlConnection(connections))
{
SqlCommand command = new SqlCommand("ContactInfo_Add", connect);
command.Parameters.Add(new SqlParameter("name", name));
command.Parameters.Add(new SqlParameter("address", address));
command.Parameters.Add(new SqlParameter("Product", name));
command.Parameters.Add(new SqlParameter("Quantity", address));
command.Parameters.Add(new SqlParameter("DueDate", city));
connect.Open();
command.ExecuteNonQuery();
}
SQL SERVER -
ALTER PROCEDURE [dbo].[Contact_Add]
@name varchar(40),
@address varchar(60),
@Product varchar(40),
@Quantity varchar(5),
@DueDate datetime
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO DBO.PERSON
(Name, Address) VALUES (@name, @address)
INSERT INTO DBO.PRODUCT_DATA
(PersonID, Product, Quantity, DueDate) VALUES (@Product, @Quantity, @DueDate)
END
Le code insère bien. Juste comment puis-je tirer le PersonID généré automatiquement à utiliser dans PRODUCT_DATA?
user54197 regarder la réponse de KM et mon commentaire à ce sujet. L'utilisation de Scope Identity peut générer des problèmes pour renvoyer le PersonID si quelqu'un modifie sans le savoir la procédure de votre magasin. – msarchet
@msarchet: Vous voulez en savoir plus sur ces problèmes potentiels? Bien sûr, quelqu'un peut casser votre procédure stockée s'il la change sans savoir comment cela fonctionne, mais cela n'a rien à voir avec 'SCOPE_IDENTITY' lui-même - ils sont tout aussi susceptibles de casser une clause' OUTPUT INSERTED'. – LukeH
Exactement ce que vous venez de dire, ce n'est pas un problème avec SCOPE_IDENTITY lui-même, cela fonctionne très bien. Il y a juste plus de certitude sur l'utilisation de la sortie insérée car elle ne se casse pas si quelqu'un change l'ordre de la procédure stockée. Ce n'est pas parfait car il est évident que quelqu'un pourrait toujours casser votre SP, peu importe comment vous retournez une valeur. L'utilisation d'un paramètre comme '@variable int output' est la façon la plus évidente d'obtenir une sortie. Mais quelqu'un peut encore casser cela, mais c'est encore plus difficile. – msarchet