Horus Sirius
Gut bekanntes Mitglied
Hallo,
ich möchte per Software einen Kunden hinzufügen.
Wie gehe ich vor?
Mein Problem diese stored procedure hat keine Parameter...
ich möchte per Software einen Kunden hinzufügen.
Wie gehe ich vor?
Mein Problem diese stored procedure hat keine Parameter...
C#:
Dim cmd As SqlCommand = new SqlCommand("spKundeInsert", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@cMail", "meineEmail@MeineEMail.de")
SQL:
;
DECLARE @retry INT;
DECLARE @CreatedTransaction INT;
DECLARE @ReturnValue INT;
SET @retry = 5;
WHILE @retry > 0
BEGIN
-- Context Info
IF(CONTEXT_INFO() IS NOT NULL)
BEGIN
SET @OldContextInfo = CONTEXT_INFO();
END
ELSE
BEGIN
SET @OldContextInfo = 0x0;
END
DECLARE @hash VARBINARY(128);
SELECT @hash = HASHBYTES('SHA1', 'Kunde.spKundeInsert');
SET CONTEXT_INFO @hash; -- ContextInfo festlegen
BEGIN TRY
IF (@@TRANCOUNT = 0)
BEGIN
SET @CreatedTransaction = 1;
BEGIN TRANSACTION
END;
ELSE
BEGIN
SET @CreatedTransaction = 0;
SAVE TRANSACTION Savepoint0;
END;
IF(OBJECT_ID('tempdb..#Daten_spkundeInsert') IS NOT NULL)
BEGIN
DROP TABLE #Daten_spkundeInsert;
END
CREATE TABLE #Daten_spkundeInsert(InternalId INT, kInetKunde INT, kKundenKategorie INT, cKundenNr VARCHAR(30),
cFirma VARCHAR(128), cAnrede VARCHAR(30), cTitel VARCHAR(64), cVorname VARCHAR(126), cName VARCHAR(126),
cStrasse VARCHAR(255), cPLZ VARCHAR(24), cOrt VARCHAR(64), cLand VARCHAR(64), cTel VARCHAR(30), cFax VARCHAR(30),
cEMail VARCHAR(255), dErstellt DATETIME, cMobil VARCHAR(30),
fRabatt DECIMAL(28, 14), cUSTID VARCHAR(20), cNewsletter CHAR(1), cZusatz VARCHAR(60),
cEbayName VARCHAR(60), kBuyer INT, cAdressZusatz VARCHAR(255), cGeburtstag VARCHAR(10),
cWWW VARCHAR(255), cSperre CHAR(1), cPostID VARCHAR(255), kKundenGruppe INT, nDrittland TINYINT, nZahlungsziel INT,
kSprache INT, cISO VARCHAR(5), cBundesland VARCHAR(255), cHerkunft VARCHAR(255), cKassenKunde CHAR(1),
cHRNr VARCHAR(255), kZahlungsart INT, nDebitorennr INT, cSteuerNr VARCHAR(255), nKreditlimit INT, kKundenDrucktext INT,
nMahnstopp TINYINT, nMahnrhythmus INT, kFirma TINYINT, fProvision DECIMAL(28,14), nVertreter TINYINT,
fSkonto DECIMAL(28,14), nSkontoInTagen INT);
INSERT INTO #Daten_spkundeInsert(InternalId, kInetKunde, kKundenKategorie, cKundenNr, cFirma, cAnrede, cTitel, cVorname,
cName, cStrasse, cPLZ, cOrt, cLand, cTel, cFax, cEMail, dErstellt, cMobil, fRabatt,
cUSTID, cNewsletter, cZusatz, cEbayName, kBuyer, cAdressZusatz, cGeburtstag, cWWW, cSperre, cPostID,
kKundenGruppe, nDrittland, nZahlungsziel, kSprache, cISO, cBundesland, cHerkunft, cKassenKunde, cHRNr,
kZahlungsart, nDebitorennr, cSteuerNr, nKreditlimit, kKundenDrucktext, nMahnstopp, nMahnrhythmus, kFirma, fProvision,
nVertreter, fSkonto, nSkontoInTagen)
SELECT Daten.kInternalId, Daten.kInetKunde, Daten.kKundenKategorie, Daten.cKundenNr, Daten.cFirma,
Daten.cAnrede, Daten.cTitel, Daten.cVorname, Daten.cName, Daten.cStrasse, Daten.cPLZ, Daten.cOrt, Daten.cLand,
Daten.cTel, Daten.cFax, Daten.cEMail, Daten.dErstellt, Daten.cMobil,
Daten.fRabatt, Daten.cUSTID, Daten.cNewsletter, Daten.cZusatz, Daten.cEbayName, Daten.kBuyer,
Daten.cAdressZusatz, Daten.cGeburtstag, Daten.cWWW, Daten.cSperre, Daten.cPostID, Daten.kKundenGruppe,
Daten.nDrittland, Daten.nZahlungsziel, Daten.kSprache, Daten.cISO, Daten.cBundesland, Daten.cHerkunft,
Daten.cKassenKunde, Daten.cHRNr, Daten.kZahlungsart, Daten.nDebitorennr, Daten.cSteuerNr,
Daten.nKreditlimit, Daten.kKundenDrucktext, Daten.nMahnstopp, Daten.nMahnrhythmus, Daten.kFirma, Daten.fProvision,
Daten.nVertreter, Daten.fSkonto, Daten.nSkontoInTagen
FROM @Daten AS Daten;
--
-- Hier kommt der Code rein vor dem INSERT/UPDATE/DELETE
--
IF(OBJECT_ID('tempdb..#Temp_spkundeInsert') IS NOT NULL)
BEGIN
DROP TABLE #Temp_spkundeInsert;
END
CREATE TABLE #Temp_spkundeInsert(InternalId INT IDENTITY(1,1), kKunde INT);
-- Daten schreiben
INSERT INTO dbo.tkunde(kInetKunde, kKundenKategorie, cKundenNr, dErstellt, fRabatt,
cNewsletter, cEbayName, kBuyer, cGeburtstag, cWWW, cSperre, kKundenGruppe, nDrittland,
nZahlungsziel, kSprache, cHerkunft, cKassenKunde, cHRNr, kZahlungsart, nDebitorennr, cSteuerNr,
nKreditlimit, kKundenDrucktext, nMahnstopp, nMahnrhythmus, kFirma, fProvision, nVertreter, fSkonto, nSkontoInTagen)
OUTPUT INSERTED.kKunde INTO #Temp_spkundeInsert
SELECT kInetKunde, kKundenKategorie, cKundenNr,
dErstellt, fRabatt, cNewsletter, cEbayName, kBuyer, cGeburtstag,
cWWW, cSperre, kKundenGruppe, nDrittland, nZahlungsziel, kSprache, cHerkunft, cKassenKunde, cHRNr,
kZahlungsart, nDebitorennr, cSteuerNr, nKreditlimit, kKundenDrucktext, nMahnstopp, nMahnrhythmus, Daten.kFirma,
Daten.fProvision, Daten.nVertreter, Daten.fSkonto, Daten.nSkontoInTagen
FROM #Daten_spkundeInsert AS Daten;
--
-- tAdresse schreiben
--
DECLARE @adresse TYPE_spAdresseInsert;
INSERT INTO @adresse ( kInternalId,
kInetAdresse,
kKunde,
cFirma,
cAnrede,
cTitel,
cVorname,
cName,
cStrasse,
cPLZ,
cOrt,
cLand,
cTel,
cZusatz,
cAdressZusatz,
cPostID,
cMobil,
cMail,
cFax,
cBundesland,
cISO,
nStandard,
nTyp,
cUstId )
SELECT #Temp_spkundeInsert.InternalId,
tinetadress.kInetAdress,
#Temp_spkundeInsert.kKunde,
Daten.cFirma,
Daten.cAnrede,
Daten.cTitel,
Daten.cVorname,
Daten.cName,
Daten.cStrasse,
Daten.cPLZ,
Daten.cOrt,
Daten.cLand,
Daten.cTel,
Daten.cZusatz,
Daten.cAdressZusatz,
Daten.cPostID,
Daten.cMobil,
Daten.cEMail,
Daten.cFax,
Daten.cBundesland,
Daten.cISO,
1,
1,
Daten.cUstId
FROM #Daten_spkundeInsert AS Daten
JOIN #Temp_spkundeInsert ON #Temp_spkundeInsert.InternalId = Daten.InternalId
LEFT JOIN dbo.tinetadress ON tinetadress.kKunde = #Temp_spkundeInsert.kKunde
EXEC dbo.spAdresseInsert @Adresse = @adresse,
@callerKundeInsert = 1
--
-- Hier kommt der Code nach dem INSERT/UPDATE/DELETE rein
--
DECLARE @KundenToUpdate AS TYPE_spUpdateKundeSuche;
INSERT INTO @KundenToUpdate (kKunde)
SELECT DISTINCT kKunde
FROM #Temp_spkundeInsert;
EXEC Kunde.spUpdateKundeSuche @Kunden = @KundenToUpdate;
-- Rückgabe des PK
SELECT @ReturnValue = #Temp_spkundeInsert.kKunde
FROM #Temp_spkundeInsert;
IF(@CreatedTransaction = 1)
BEGIN
COMMIT-- Nur wenn kein Savepoint gesetzt
END
RETURN @ReturnValue;
END TRY
BEGIN CATCH
-- Dedlock Catch
IF(ERROR_NUMBER() = 1205)
BEGIN
SET @retry = @retry - 1;
IF(@CreatedTransaction = 1)
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION Savepoint0;
END
IF(@retry = 0)
BEGIN
SET CONTEXT_INFO 0x0;
THROW;
RETURN 0;
END
EXEC dbo.spWaitRandom;
END
ELSE
BEGIN
SET @retry = -1;
IF(@CreatedTransaction = 1)
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION Savepoint0;
END
SET CONTEXT_INFO @OldContextInfo;
THROW;
RETURN 0;
END
END CATCH
END