多分基本的な質問があります。どうか、何らかの保護を作成する方法をアドバイスできますか?2回実行すると複数の行が作成されるSQL保護
ご覧のとおり、
これを2回実行すると、2行の作成を防止する必要があります。 重複を避ける必要があります。私はこれを宿題として手に入れましたが、これを解決する力はありません。私はこれがいくつかの難しい作業ではないと思うが、私はそれをGoogleにしても解決策を見つけることができなかった。
ご協力いただきありがとうございます。
ここにコードがあります。
DECLARE @TEST BIT
DECLARE @Environment VARCHAR(4)
DECLARE @TargetDB VARCHAR(4)
DECLARE @lMailboxID INT
DECLARE @lMailboxAddress VARCHAR(128)
DECLARE @lMailServer INT
DECLARE @lStorageFolder INT
DECLARE @lPollingTime INT
DECLARE @lActiveFlag INT
DECLARE @lCustomer VARCHAR(3)
DECLARE @lDomain VARCHAR(32)
DECLARE @lUsername VARCHAR(64)
DECLARE @lPassword VARCHAR(64)
DECLARE @lOperatingMode VARCHAR(15)
DECLARE @lARECode VARCHAR(4)
DECLARE @lOrgID VARCHAR(8)
DECLARE @lProcessFlag VARCHAR(1)
DECLARE @lSetReadFlag VARCHAR(1)
DECLARE @lSenderCheck INT
DECLARE @lDomainCheck VARCHAR(128)
DECLARE @lPDFCheck INT
DECLARE @lARECheck INT
DECLARE @lDocPriority INT
DECLARE @lOrgIDCheck INT
DECLARE @lSingleInvoice INT
DECLARE @lMailSourceFolder VARCHAR(32)
DECLARE @lMailMoveToFolder VARCHAR(32)
DECLARE @lFileExt VARCHAR(64)
DECLARE @lPrimaryDocType VARCHAR(6)
DECLARE @lSenderAddress VARCHAR(128)
DECLARE @lCockpitDocType VARCHAR(2)
DECLARE @lConfirmTemplate INT
DECLARE @lConfirmAddressCC VARCHAR(128)
DECLARE @lVerifRejectTemplate INT
DECLARE @lVerifRejectAddressCC VARCHAR(128)
DECLARE @lTechRejectTemplate INT
DECLARE @lTechRejectAddressCC VARCHAR(128)
DECLARE @lReducedValidation VARCHAR(1)
DECLARE @lLanguageForReply VARCHAR(2)
DECLARE @lRedirectNoReply VARCHAR(128)
DECLARE @lMailReplyTo VARCHAR(128)
DECLARE @lServiceName VARCHAR(100)
DECLARE @lAttachmentRule INT
DECLARE @DocRejectTemplate varchar(128)
DECLARE @DocRejectAddressCC varchar(128)
DEClARE @ConvertToPDFA bit
DECLARE @AdditionalCustomers varchar(128)
DECLARE @DeleteValidEmail int
DECLARE @DeleteInvalidEmail int
DECLARE @MessageClass varchar(64)
DECLARE @VerifRescanTemplate varchar(128)
DECLARE @VerifRescanAddressCC VARCHAR(128)
DECLARE @RejectionLetterAddress VARCHAR(128)
DECLARE @RECORDCHANGES TABLE (Action VARCHAR(255), Change_what VARCHAR(255), Change_to VARCHAR(255))
/********************************************************
* STEP PREPARING VARIABLES *
*********************************************************/
SET @TargetDB = CASE @@SERVERNAME
WHEN 'xyz/xyz'
THEN 'DEV'
WHEN 'xyz/xyz'
THEN 'PROD'
ELSE 'QA'
END
IF @Environment <> @TargetDB
BEGIN
PRINT 'PATCH is not applying in right environment'
RETURN
END
/********************************************************
* STEP CHECK *
*********************************************************/
<<Here I want that code>>
/********************************************************
* STEP CHANGING *
*********************************************************/
BEGIN TRANSACTION
SELECT @lMailboxID = MailboxID
FROM BW_EC_MAILBOX
WHERE EmailAddress = @lMailboxAddress
AND SourceFolder = @lMailSourceFolder
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO BW_EC_MAILBOX (ServerID, EmailAddress, DomainName, UserName, [Password])
VALUES (@lMailServer, @lMailboxAddress, @lDomain, @lUsername, @lPassword)
SET @lMailboxID = @@IDENTITY
END
UPDATE BW_EC_MAILBOX
SET ServerID = @lMailServer
,DomainName = @lDomain
,UserName = @lUsername
,[Password] = @lPassword
,SourceFolder = @lMailSourceFolder
,MoveToFolder = @lMailMoveToFolder
,ProcessFlag = @lProcessFlag
,SetReadFlag = @lSetReadFlag
,StorageFolder = @lStorageFolder
,OperatingMode = @lOperatingMode
,FileExt = @lFileExt
,PollingTime = @lPollingTime
,CheckMailboxAt = getdate()
,EnforceOrgIDCheck = @lOrgIDCheck
,EnforceARECheck = @lARECheck
,SingleInvoicePerEmail = @lSingleInvoice
,PrimaryDocType = @lPrimaryDocType
,DocPriority = @lDocPriority
,CockpitDocType = @lCockpitDocType
,Customer = @lCustomer
,ARECode = @lARECode
,OrgID = @lOrgID
,EnforceSenderCheck = @lSenderCheck
,EnforcePDFCheck = @lPDFCheck
,ConfirmTemplate = @lConfirmTemplate
,ConfirmAddressCC = @lConfirmAddressCC
,VerifRejectTemplate = @lVerifRejectTemplate
,VerifRejectAddressCC = @lVerifRejectAddressCC
,TechRejectTemplate = @lTechRejectTemplate
,TechRejectAddressCC = @lTechRejectAddressCC
,ReducedValidation = @lReducedValidation
,LanguageForReply = @lLanguageForReply
,RedirectNoReply = @lRedirectNoReply
,MailReplyTo = @lMailReplyTo
,ServiceName = @lServiceName
,AttachmentRule = @lAttachmentRule
,DomainCheck = @lDomainCheck
,ActiveFlag = @lActiveFlag
,DocRejectTemplate = @DocRejectTemplate
,DocRejectAddressCC = @DocRejectAddressCC
,ConvertToPDFA = @ConvertToPDFA
,AdditionalCustomers = @AdditionalCustomers
,DeleteValidEmail = @DeleteValidEmail
,DeleteInvalidEmail = @DeleteInvalidEmail
,MessageClass = @MessageClass
,VerifRescanTemplate = @VerifRescanTemplate
,VerifRescanAddressCC = @VerifRescanAddressCC
,RejectionLetterAddress = @RejectionLetterAddress
WHERE EmailAddress = @lMailboxAddress
SELECT *
FROM @RECORDCHANGES
/********************************************************
* STEP COMMIT OR ROLLBACK *
*********************************************************/
IF @TEST = 1
BEGIN
ROLLBACK TRANSACTION
PRINT 'ROLLBACK'
END
ELSE
BEGIN
COMMIT TRANSACTION
PRINT 'COMMIT'
END
誰かが私に助けてくれたら非常に感謝します。重複した挿入を防止するために
一意の制約を列または列のセットに追加すると、重複した挿入が失敗します。 –
これは宿題なので、あなたのためにやるだけでは不安なので、IF EXISTSを使用して、挿入しようとしているデータがすでに存在するかどうかを確認してください。 – Leonidas199x
ありがとう、皆さん。いくつかの情報源に対して、あなたはSQLについてお勧めするとアドバイスできますか? –