sql - कोशिश करो... कैच काम करने के लिए नहीं लगता है




sql-server error-handling (2)

मेरे पास निम्न कोड का कोड है जो यह सुनिश्चित करने के लिए है कि अस्थायी तालिका मौजूद नहीं है यदि टेबल मौजूद है तो मैं उसे छोटा करना चाहता हूं।

CREATE TABLE #LookupLinks(
        [SyncID] uniqueidentifier,
        [Name] nvarchar(50),
        [SQLTable] nvarchar(50)
    ) --I create this just to test my try-catch

BEGIN TRY
    CREATE TABLE #LookupLinks(
        [SyncID] uniqueidentifier,
        [Name] nvarchar(50),
        [SQLTable] nvarchar(50)
    )
END TRY
BEGIN CATCH
    PRINT N'#LookupLinks already existed and was truncated.';
    TRUNCATE TABLE #LookupLinks
END CATCH

मैं यह करना चाहता हूं:

  1. अस्थायी तालिका बनाई गई है
  2. इसे फिर से बनाने का प्रयास
  3. त्रुटि हमें पकड़ में भेजता है
  4. टेबल काट दिया गया है और सब कुछ सामान्य रूप से जारी है

क्या होता है:

त्रुटि: डेटाबेस में '#LookupLinks' का नाम पहले से मौजूद है

मुझसे यहां क्या गलत हो रहा है?


मुझे लगता है कि आप वास्तव में क्या हासिल करना चाहते हैं:

IF OBJECT_ID('tempdb..#LookupLinks') IS NOT NULL --Table already exists
BEGIN
    TRUNCATE TABLE #LookupLinks
    PRINT N'#LookupLinks already existed and was truncated.'; 
END
ELSE
BEGIN 
    CREATE TABLE #LookupLinks(
        [SyncID] uniqueidentifier,
        [Name] nvarchar(50),
        [SQLTable] nvarchar(50)
    )
END


TRY CATCH की TRY CATCH रन टाइम त्रुटि के लिए है आप क्या प्राप्त कर रहे हैं एक संकलन समय त्रुटि है अपने बयान से पहले PRINT 1 जोड़ें और आप देखेंगे कि कुछ भी निष्पादित नहीं हो रहा है

print 1

    CREATE TABLE #LookupLinks(
        [SyncID] uniqueidentifier,
        [Name] nvarchar(50),
        [SQLTable] nvarchar(50)
    );
BEGIN TRY

    CREATE TABLE #LookupLinks(
        [SyncID] uniqueidentifier,
        [Name] nvarchar(50),
        [SQLTable] nvarchar(50)
    );
END TRY
BEGIN CATCH
    PRINT N'#LookupLinks already existed and was truncated.';
    TRUNCATE TABLE #LookupLinks
END CATCH




try-catch