저장 프로시저 테이프 사무, 연결 id, 반환 값

39861 단어 저장 프로시저
다음 SQL 은 나중에 더 필요 하지 않도록 백업 합 니 다.
메 시 지 를 삭제 하면 답장 메 시 지 를 단계별 로 삭제 합 니 다. 이 때 우 리 는 다음 과 같은 사 무 를 사용 해 야 합 니 다. SQL
 1 ALTER PROCEDURE [dbo].[proc_tb_leaveword_delete]

 2 ( 

 3     @leavewordID INT,

 4     @record TINYINT OUTPUT

 5 )    

 6 AS

 7 BEGIN

 8     BEGIN TRY

 9         BEGIN TRANSACTION

10             DELETE FROM tb_leavewordID WHERE leavewordID=@leavewordID

11             DELETE FROM tb_reply WHERE leavewordID=@leavewordID

12             SET @record=0 --  

13             COMMIT TRANSACTION

14     END TRY

15     BEGIN CATCH

16         ROLLBACK TRANSACTION

17         SET @record=-1 --  

18     END CATCH

19     RETURN @record

20 END

하나의 뉴스 를 삭제 합 니 다. 하나의 뉴스 에 여러 개의 댓 글 이 있 을 수 있 습 니 다. 모든 댓 글 에 답장 메시지 가 있 을 수 있 습 니 다. 이때 우 리 는 하나의 뉴스 를 삭제 한 SQL 은 다음 과 같 습 니 다.
 1 ALTER PROCEDURE [dbo].[proc_tb_news_delete]

 2 ( 

 3     @newsID INT,

 4     @record TINYINT OUTPUT

 5 )    

 6 AS

 7 BEGIN

 8     DECLARE @leavewordCount INT --    

 9     DECLARE @delete_where VARCHAR(4000) --  id  ,  1,2,4,5,6

10     SET @leavewordCount=(SELECT ISNULL(COUNT(1),0) FROM tb_leaveword WHERE newsID=@newsID)

11     SET @delete_where=''

12 

13     IF(@leavewordCount=0) --        

14         BEGIN TRY

15             DELETE FROM tb_news WHERE newsID=@newsID

16             SET @record=0 --  

17         END TRY

18         BEGIN CATCH

19             SET @record=-1 --  

20         END CATCH

21 

22     ELSE IF(@leavewordCount>0) --        

23        ----      (start)----

24        DECLARE MY_CURSOR CURSOR

25        FOR SELECT leavewordID FROM tb_news WHERE newsID=@newsID

26        BEGIN

27            DECLARE @leavewordID INT

28            OPEN MY_CURSOR

29            FETCH NEXT FROM MY_CURSOR INTO @leavewordID

30            IF(@leavewordID IS NOT NULL)

31                SET @delete_where=@delete_where+CAST(@leavewordID AS VARCHAR(10))+','

32                WHILE(@@FETCH_STATUS<>-1)

33                    BEGIN

34                        SET @leavewordID=NULL

35                        FETCH NEXT FROM MY_CURSOR INTO @leavewordID

36                        IF(@leavewordID IS NOT NULL)

37                            SET @delete_where=@delete_where+CAST(@leavewordID AS VARCHAR(10))+','

38                    END

39         END

40         CLOSE MY_CURSOR

41         DEALLOCATE MY_CURSOR

42         SET @delete_where=SUBSTRING(@delete_where,1,LEN(@delete_where)-1)

43         ----      (end)----

44         BEGIN

45             BEGIN TRY

46                 BEGIN TRANSACTION

47                     DELETE FROM tb_news WHERE newsID=@newsID

48                     EXECUTE('DELETE FROM tb_leaveword WHERE leavewordID IN('+@delete_where+')')

49                     EXECUTE('DELETE FROM tb_reply WHERE leavewordID IN('+@delete_where+')')

50                     SET @record=0 --  

51                     COMMIT TRANSACTION

52             END TRY

53             BEGIN CATCH

54                 ROLLBACK TRANSACTION

55                 SET @record=-1 --  

56             END CATCH

57         END

58      RETURN @record

59 END

뉴스 유형 을 삭제 할 때 이 유형 에 여러 개의 뉴스 가 있 을 수 있 습 니 다. 이 뉴스 에 여러 개의 댓 글 이 있 고 댓 글 에 여러 개의 답장 이 있 습 니 다. 순서대로 삭제 합 니 다. 다음 과 같은 저장 과정 입 니 다.
 
 1 ALTER PROCEDURE [dbo].[proc_tb_news_type_delete]

 2 ( 

 3     @typeID INT,

 4     @record TINYINT OUTPUT

 5 )

 6 AS

 7 BEGIN

 8     DECLARE @newsCount INT --          

 9     SET @newsCount=(SELECT ISNULL(COUNT(1),0) FROM tb_news WHERE typeID=@typeID)

10     IF(@newsCount=0) --       

11         BEGIN TRY

12             DELETE FROM tb_news_type WHERE typeID=@typeID

13             SET @record=0 --  

14         END TRY

15         BEGIN CATCH

16             SET @record=-1 --  

17         END CATCH

18     

19     ELSE IF(@newsCount>0) --       

20         BEGIN TRY

21             BEGIN TRANSACTION

22                 DECLARE MY_CURDOR CURSOR

23                 FOR SELECT newsID FROM tb_news WHERE typeID=@typeID

24                 BEGIN

25                     DECLARE @newsID INT

26                     OPEN MY_CURSOR

27                     FETCH NEXT FROM MY_CURSOR INTO @newsID

28                     IF(@newsID IS NOT NULL)

29                         DELETE FROM tb_news_type WHERE typeID=@typeID

30                         EXECUTE proc_tb_news_delete @newsID=@newsID --      

31                         WHILE(@@FETCH_STATUS<>-1)

32                             BEGIN

33                                 SET @newsID=NULL

34                                 FETCH NEXT FROM MY_CURSOR INTO @newsID

35                                 IF(@newsID IS NOT NULL)

36                                     DELETE FROM tb_news_type WHERE typeID=@typeID

37                                     EXECUTE proc_tb_news_delete @newsID=@newsID --      

38                             END

39                 END

40                 CLOSE MY_CURSOR

41                 DEALLOCATE MY_CURSOR

42                 COMMIT TRANSACTION

43         END TRY

44         BEGIN CATCH

45             ROLLBACK TRANSACTION

46             SET @record=-1 --  

47         END CATCH

48      RETURN @record

49 END

 여러 개의 뉴스 유형 을 삭제 할 때 우 리 는 맞 춤 형 id 를 필요 로 한다. 예 를 들 어 1, 2, 4, 5, 12, 34. 저장 과정 에 들 어가 고 문 자 를 분할 하 는 SQL 문 구 는 다음 과 같다.
 1 DECLARE @A VARCHAR(5000)

 2 DECLARE @i INT

 3 SET @A='A,B,C,D,D,S,X,C,C,C,D,AAAA,DDDDDD,DEF,ERT,'

 4 SET @i=CHARINDEX(',',@A)

 5 

 6 WHILE @i>=1

 7 BEGIN

 8     PRINT LEFT(@A,@i-1)

 9     SET @A=SUBSTRING(@A,@i+1,LEN(@A)-1)

10     SET @i=CHARINDEX(',',@A)

11 END

여러 개의 뉴스 형식 을 삭제 합 니 다 SQL 은 다음 과 같 습 니 다.
 1 ALTER PROCEDURE [dbo].[proc_tb_news_type_selects_delete]

 2 ( 

 3     @typeID_list VARCHAR(500),

 4     @record TINYINT OUTPUT

 5 )

 6 AS

 7 BEGIN

 8     BEGIN TRY

 9             BEGIN TRANSACTION

10                 DECLARE @index INT

11                 DECLARE @typeID INT

12                 SET @typeID_list=RTRIM(LTRIM(@typeID_list))

13                 SET @index=CHARINDEX(',',@typeID_list)

14                 WHILE @index>=1

15                     BEGIN

16                         SET @typeID=CAST(LEFT(@typeID_list,@index-1) AS INT)

17                         EXECUTE proc_tb_news_type_delete @typeID=@typeID

18                         SET @typeID_list=SUBSTRING(@typeID_list,@index+1,LEN(@typeID_list)-1)

19                         SET @index=CHARINDEX(',',@typeID_list)

20                     END

21             COMMIT TRANSACTION

22             SET @record=0 --  

23     END TRY

24     BEGIN CATCH

25         ROLLBACK TRANSACTION

26         SET @record=-1 --  

27     END CATCH

28     RETURN @record

29 END

대문자 문자열 무 작위 생 성
대문자 65 - 90 소문 자 97 - 122
DECLARE @random INT

DECLARE @i INT

DECLARE @az VARCHAR(8)

SET @i=1

SET @az=CHAR(FLOOR(RAND()*26)+65)

WHILE @i<8

    BEGIN

        SET @i=@i+1

        SET @az=@az+CHAR(FLOOR(RAND()*26)+65)

    END

PRINT @az

전재 가 필요 하 시 면 출처 를 밝 혀 주 십시오.

좋은 웹페이지 즐겨찾기