[ad_1]
ALTER PROCEDURE [dbo].[SendSMS_TestMark] @EntityID INT , --PolicyID @Mobile VARCHAR(11) , @Message VARCHAR(480) ,--What Needs to be send Text @ScheduleDateTime DATETIME , --Same date sync @DateCreated DATETIME, --Same date sync @ProjectID INT -- ClaimType and message type AS BEGIN TRY BEGIN TRAN IF LEN(@Mobile) <= 10 OR (LEN(@Mobile) >=10 ) INSERT INTO Media_QA.Multimedia.SMS ( fkEntityID , C_EntityType , Mobile , Message , ScheduledDateTime , DateCreated , fkProjectID ) SELECT @EntityID , 776 , --Policy @Mobile, @Message , @ScheduleDateTime , @DateCreated , @ProjectID END TRY BEGIN CATCH RAISERROR ('Invalid Mobile: Mobile number must be 10 digits', 16,2 ) ROLLBACK COMMIT TRAN
我尝试过的:
我尝试过交换功能,但它们仍然提交
解决方案3
要补充其他人所说的内容,您需要更加小心您的条件:
SQL
IF LEN(@Mobile) <= 10 OR (LEN(@Mobile) >=10 )
永远为真,因为 OR 的一侧或另一侧永远为真。
解决方案1
我在任何地方都没有看到 END CATCH,所以这将是一个问题。
另外,您不会在任何地方抛出异常供 TRY 块捕获。 仅 IF 语句失败不会引发异常。
坦率地说,我在这里看不到任何需要 TRY/CATCH 的东西。 IF 语句的“假”部分可能会引发返回给调用者的错误。
解决方案2
您的 SP 有语法错误,不应编译。 我对您的 SP 进行了一些更改,使其处于工作状态,但您需要了解您的 SP 存在逻辑错误。
SQL
ALTER PROCEDURE [dbo].[SendSMS_TestMark] @EntityID INT , --PolicyID @Mobile VARCHAR(11) , @Message VARCHAR(480) ,--What Needs to be send Text @ScheduleDateTime DATETIME , --Same date sync @DateCreated DATETIME, --Same date sync @ProjectID INT -- ClaimType and message type AS BEGIN TRY BEGIN TRANSACTION IF LEN(@Mobile) <= 10 OR (LEN(@Mobile) >=10 ) PRINT 1 INSERT INTO Media_QA.Multimedia.SMS ( fkEntityID , C_EntityType , Mobile , Message , ScheduledDateTime , DateCreated , fkProjectID ) SELECT @EntityID , 776 , --Policy @Mobile, @Message , @ScheduleDateTime , @DateCreated , @ProjectID COMMIT TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; RAISERROR ('Invalid Mobile: Mobile number must be 10 digits', 16,2 ) END CATCH;
最后,正如 @Dave 提到的,您的 SP 首先不需要事务,因为单个插入已经是原子的。 您需要更好地了解交易。
让我们修改您的 SP,进行必要的更正。
SQL
CREATE OR ALTER PROCEDURE [dbo].[SendSMS_TestMark] @EntityID INT , --PolicyID @Mobile VARCHAR(11) , @Message VARCHAR(480) ,--What Needs to be send Text @ScheduleDateTime DATETIME , --Same date sync @DateCreated DATETIME, --Same date sync @ProjectID INT -- ClaimType and message type AS BEGIN IF LEN(@Mobile) = 10 BEGIN INSERT INTO Media_QA.Multimedia.SMS ( fkEntityID , C_EntityType , Mobile , Message , ScheduledDateTime , DateCreated , fkProjectID ) SELECT @EntityID , 776 , --Policy @Mobile, @Message , @ScheduleDateTime , @DateCreated , @ProjectID END ELSE BEGIN RAISERROR ('Invalid Mobile: Mobile number must be 10 digits', 16,2 ); END END
[ad_2]
コメント