Ciao ragazzi, torno ad assillarvi con un problema che mi sta facendo diventare scemo. Ho 2 stored procedure, che servono ciascuna per creare un record in una tabella chiamata Aliases in cui la chiave primaria autoincrementale è IDAlias (oltre ad aggiungere altre entry in altre tabelle). Le 2 stored procedure sono le seguenti:

codice:
ALTER PROCEDURE spDOTNETCreaNuovaPersona
(
		@IDAlias int OUTPUT,
		@Alias varchar(255),
		@IDPersona int OUTPUT
												
	)

As
	
	begin transaction
	INSERT INTO dbo.Aliases
	(Alias) VALUES (@Alias)
	SET @IDAlias = SCOPE_IDENTITY() 
	INSERT INTO dbo.Persone
	(IDAlias, SessoMaschile, Titolo) VALUES (@IDAlias, 1 ,'Scegli')	


SET @IDPersona = @IDAlias

commit transaction
e

codice:
ALTER PROCEDURE spDOTNETCreaPersonaProfessionista
(
		@IDAlias int OUTPUT,
		@IDPersona int,
		@Sigla varchar(3),
		@Alias varchar(255),
		@RagioneSociale varchar(128),
		@IDAzienda int OUT
)

 AS	
	 Begin transaction
	

	INSERT INTO dbo.Aliases
	(Alias) VALUES (@Alias)
	SET @IDAlias = SCOPE_IDENTITY() 
	INSERT INTO dbo.Aziende
	(IDAlias,RagioneSociale) VALUES (@IDAlias,@RagioneSociale)
	INSERT INTO dbo.Fornitori
	(IDAzienda) VALUES (@IDAlias)
	INSERT INTO dbo.BeniEServizi
	(IDFornitore,Settore) VALUES (@IDAlias,'')


	INSERT INTO Professionisti (IDPersona,IDFornitore,Sigla) VALUES (@IDPersona,@IDAlias,@Sigla)
	SET @IDAzienda = @IDAlias
			
	Commit transaction
Prese singolarmente le due sp funzionano, il problema è quando provo ad eseguire prima spDOTNETCreaNuovaPersona e poi l'altra. Infatti la prima viene eseguita correttamente, la seconda invece mi restituisce questo bel messaggio di errore:


Impossibile inserire la riga di chiave duplicata nell'oggetto 'Aliases' con indice univoco 'IX_Aliases'.
Impossibile inserire il valore Null nella colonna 'IDAlias, tabella 'dbo.Aziende'. La colonna non supporta valori Null. INSERT avrà esito negativo.
Impossibile inserire il valore Null nella colonna 'IDAzienda, tabella 'dbo.Fornitori'. La colonna non supporta valori Null. INSERT avrà esito negativo.
Impossibile inserire il valore Null nella colonna 'IDfornitore, tabella 'dbo.BeniEServizi'. La colonna non supporta valori Null. INSERT avrà esito negativo.
Impossibile inserire il valore Null nella colonna 'IDFornitore, tabella 'dbo.Professionisti'. La colonna non supporta valori Null. INSERT avrà esito negativo.
L'istruzione è stata interrotta.
L'istruzione è stata interrotta.
L'istruzione è stata interrotta.
L'istruzione è stata interrotta.
L'istruzione è stata interrotta.


Come ho già detto, se ne lancio solo 1 qualsiasi delle due, questa funziona, ma io avrei bisogno di lanciarne prima una e poi l'altra. Può dipendere da come le lancio da codice?

codice:
   Dim myConnectionString As String
        myConnectionString = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
        Dim myConnection As System.Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(myConnectionString)
Dim cmd As New Data.SqlClient.SqlCommand("spDOTNETCreaNuovaPersona", myConnection)
                cmd.CommandType = Data.CommandType.StoredProcedure
                cmd.Parameters.AddWithValue("@Alias", Me.TBAlias.Text.Replace("'", "''"))
                cmd.Parameters.AddWithValue("@IDAlias", "")


                Dim workParam As Data.SqlClient.SqlParameter
                workParam = cmd.Parameters.Add("@IDPersona", Data.SqlDbType.Int, 32)
                workParam.Direction = Data.ParameterDirection.Output


                myConnection.Open()
                cmd.ExecuteNonQuery()

                Dim ID As Integer = cmd.Parameters("@IDPersona").Value

                myConnection.Close()
codice:
   Dim myConnectionString2 As String
        myConnectionString2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
        Dim myConnection2 As System.Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(myConnectionString2)


        Dim cmd1 As New Data.SqlClient.SqlCommand("SpDOTNETCreaPersonaProfessionista", myConnection2)
        cmd1.CommandType = Data.CommandType.StoredProcedure

        cmd1.Parameters.AddWithValue("@IDAlias", "")
        cmd1.Parameters.AddWithValue("@Sigla", Me.TBSiglaProfessionista.Text)
        cmd1.Parameters.AddWithValue("@IDPersona", Me.FormView1.DataKey.Value)
        cmd1.Parameters.AddWithValue("@Alias", Me.TBAlias.Text.Replace("'", "''"))
        cmd1.Parameters.AddWithValue("@RagioneSociale", Me.TBRagioneSociale.Text)


        Dim workParam As Data.SqlClient.SqlParameter
        workParam = cmd1.Parameters.Add("@IDAzienda", Data.SqlDbType.Int, 32)
        workParam.Direction = Data.ParameterDirection.Output

        myConnection2.Open()
        cmd1.ExecuteNonQuery()


        Dim ID As Integer = cmd1.Parameters("@IDAzienda").Value

        myConnection2.Close()
Grazie per l'aiuto che (spero ) mi darete!