ਕੋਸ਼ਿਸ਼ ਕਰੋ ਵਰਤਣ ਲਈ ਇੱਕ ਕਦਮ-ਦਰ-ਕਦਮ ਗਾਈਡ ... SQL ਸਰਵਰ ਗਲਤੀ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੈਚ

ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਨੂੰ ਰੋਕਣ ਤੋਂ ਬਿਨਾਂ ਗਲਤੀਆਂ ਦੀ ਪਛਾਣ ਕਰੋ

TRY ... ਟ੍ਰਾਂਸੈਕਸ ਵਿੱਚ ਕੈਚ ਬਿਆਨ - SQL ਤੁਹਾਡੇ ਡਾਟਾਬੇਸ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਗਲਤੀ ਦੀਆਂ ਸ਼ਰਤਾਂ ਦਾ ਪਤਾ ਲਗਾਉਂਦਾ ਹੈ ਅਤੇ ਹੈਂਡਲ ਕਰਦਾ ਹੈ. ਇਹ ਬਿਆਨ SQL ਸਰਵਰ ਗਲਤੀ ਪਰਬੰਧਨ ਦਾ ਅਧਾਰ ਹੈ ਅਤੇ ਮਜ਼ਬੂਤ ​​ਡਾਟਾਬੇਸ ਐਪਲੀਕੇਸ਼ਨ ਵਿਕਸਤ ਕਰਨ ਦਾ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਹਿੱਸਾ ਹੈ. ਕੋਸ਼ਿਸ਼ ਕਰੋ ... ਕੈਚ 2008 ਦੇ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ SQL ਸਰਵਰ ਤੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ, ਅਜ਼ੁਰ SQL ਡਾਟਾਬੇਸ, ਅਜ਼ੁਰ SQL ਡਾਟਾ ਵੇਅਰਹਾਊਸ ਅਤੇ ਪੈਰੇਲਲ ਡਾਟਾ ਵੇਅਰਹਾਊਸ.

TRY..CATCH ਪੇਸ਼ ਕਰ ਰਿਹਾ ਹੈ

ਕੋਸ਼ਿਸ਼ ਕਰੋ: ਕੈਚ ਤੁਹਾਨੂੰ ਦੋ ਟ੍ਰਾਂਸਕਟ-SQL ਸਟੇਟਮੈਂਟਾਂ ਨੂੰ ਦਰਸਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦੇ ਕੇ ਕੰਮ ਕਰਦਾ ਹੈ: ਇੱਕ ਜੋ ਤੁਸੀਂ "ਕੋਸ਼ਿਸ਼" ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਅਤੇ ਦੂਜੀ ਕਿਸੇ ਵੀ ਗਲਤੀਆਂ ਨੂੰ "ਫੜ "ਣ ਲਈ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ. ਜਦੋਂ SQL ਸਰਵਰ ਨੂੰ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਨ ... ਕੈਚ ਸਟੇਟਮੈਂਟ, ਇਹ ਤੁਰੰਤ TRY ਧਾਰਾ ਵਿੱਚ ਸ਼ਾਮਲ ਬਿਆਨ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ. ਜੇਕਰ TRY ਬਿਆਨ ਸਫਲਤਾਪੂਰਵਕ ਚੱਲਦਾ ਹੈ, ਤਾਂ SQL ਸਰਵਰ ਬਸ ਇਸ ਉੱਤੇ ਚਲਦਾ ਹੈ. ਹਾਲਾਂਕਿ, TRY ਕਥਨ ਇੱਕ ਗਲਤੀ ਪੈਦਾ ਕਰਦਾ ਹੈ, SQL ਸਰਵਰ ਗਲਤੀ ਨਾਲ ਹੈਂਡਲ ਕਰਨ ਲਈ CATCH ਸਟੇਟਮੈਂਟ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ.

ਮੁਢਲੀ ਸੰਟੈਕਸ ਇਸ ਫਾਰਮ ਨੂੰ ਲੈਂਦਾ ਹੈ:

BEGIN ਕੋਸ਼ਿਸ਼ ਕਰੋ {sql_statement | statement_block} ਅੰਤ ਵਿੱਚ ਕੈਚ [{sql_statement | statement_block}] END CATCH [; ]

ਕੋਸ਼ਿਸ਼ ਕਰੋ ... ਕੈਚ ਉਦਾਹਰਨ

ਇੱਕ ਉਦਾਹਰਨ ਦੇ ਉਪਯੋਗ ਦੁਆਰਾ ਇਸ ਬਿਆਨ ਦੀ ਵਰਤੋਂ ਨੂੰ ਸਮਝਣਾ ਸਭ ਤੋਂ ਅਸਾਨ ਹੈ. ਕਲਪਨਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਮਨੁੱਖੀ ਸਰੋਤ ਡੇਟਾਬੇਸ ਦੇ ਪ੍ਰਸ਼ਾਸਕ ਹੋ ਜਿਸ ਵਿੱਚ "ਕਰਮਚਾਰੀਆਂ" ਨਾਮਕ ਇੱਕ ਸਾਰਣੀ ਹੈ ਜਿਸ ਵਿੱਚ ਤੁਹਾਡੇ ਸੰਗਠਨ ਵਿੱਚ ਹਰੇਕ ਕਰਮਚਾਰੀ ਬਾਰੇ ਜਾਣਕਾਰੀ ਹੈ. ਉਹ ਸਾਰਣੀ ਇਕ ਪੂਰਨ ਅੰਕ ਕਰਮਚਾਰੀ ਆਈਡੀ ਨੰਬਰ ਨੂੰ ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀ ਵਜੋਂ ਵਰਤਦੀ ਹੈ. ਤੁਸੀਂ ਹੇਠਾਂ ਦਿੱਤੇ ਸਟੇਟਮੈਂਟ ਨੂੰ ਆਪਣੇ ਡਾਟਾਬੇਸ ਵਿੱਚ ਨਵਾਂ ਕਰਮਚਾਰੀ ਜੋੜਨ ਲਈ ਵਰਤ ਸਕਦੇ ਹੋ:

ਕਰਮਚਾਰੀਆਂ (ID, first_name, last_name, ਐਕਸਟੈਂਸ਼ਨ) ਮੁੱਲਾਂ (INSERT) (12497, 'ਮਾਈਕ', 'ਚੈਪਲੇ', 4201)

ਆਮ ਹਾਲਾਤਾਂ ਵਿੱਚ, ਇਹ ਬਿਆਨ ਕਰਮਚਾਰੀਆਂ ਦੀ ਸਾਰਣੀ ਵਿੱਚ ਇੱਕ ਜੋੜਾ ਜੋੜ ਦੇਵੇਗਾ. ਹਾਲਾਂਕਿ, ਜੇ 12497 ਦੀ ਆਈ ਡੀ ਵਾਲਾ ਕਰਮਚਾਰੀ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਡਾਟਾਬੇਸ ਵਿੱਚ ਮੌਜੂਦ ਹੈ, ਤਾਂ ਕਤਾਰ ਨੂੰ ਪਾਉਣਾ ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀ ਪਾਬੰਦੀ ਦਾ ਉਲੰਘਣ ਹੋਵੇਗਾ ਅਤੇ ਨਤੀਜੇ ਵਜੋਂ ਹੇਠਲੀ ਗਲਤੀ ਹੋਵੇਗੀ:

ਐਸਐਮਐਸ 2627, ਲੈਵਲ 14, ਸਟੇਟ 1, ਲਾਈਨ 1 ਪ੍ਰਾਇਮਰੀ ਕੇਅਰ ਪਾਬੰਦੀ 'ਪੀਕੇ_ ਕਰਮਚਾਰੀ_ਆਈਡੀ' ਦੀ ਉਲੰਘਣਾ. ਇਕਾਈ 'dbo.employees' ਵਿੱਚ ਡੁਪਲੀਕੇਟ ਕੁੰਜੀ ਨੂੰ ਸੰਮਿਲਿਤ ਨਹੀਂ ਕਰ ਸਕਦਾ. ਬਿਆਨ ਨੂੰ ਸਮਾਪਤ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ.

ਹਾਲਾਂਕਿ ਇਹ ਅਸ਼ੁੱਧੀ ਤੁਹਾਨੂੰ ਸਮੱਸਿਆ ਦਾ ਨਿਪਟਾਰਾ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ, ਪਰ ਇਸਦੇ ਨਾਲ ਦੋ ਮੁੱਦੇ ਹਨ. ਪਹਿਲੀ, ਸੰਦੇਸ਼ ਗੁਪਤ ਹੈ. ਇਸ ਵਿੱਚ ਔਸਤ ਕੋਡ, ਲਾਈਨ ਨੰਬਰ ਅਤੇ ਔਸਤ ਉਪਯੋਗਕਰਤਾ ਨੂੰ ਅਗਾਧ ਜਾਣਕਾਰੀ ਸ਼ਾਮਿਲ ਨਹੀਂ ਹੈ. ਦੂਜਾ, ਅਤੇ ਹੋਰ ਮਹੱਤਵਪੂਰਨ, ਇਹ ਸਟੇਟਮੈਂਟ ਨੂੰ ਅਧੂਰਾ ਛੱਡਣ ਦਾ ਕਾਰਨ ਬਣਦਾ ਹੈ ਅਤੇ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਕਰੈਸ਼ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੀ ਹੈ.

ਚੋਣ ਇਕ ਬਿਆਨ ਵਿਚ ਬਿਆਨ ਨੂੰ ਸਮੇਟਣਾ ਹੈ ... ਕੈਚ ਬਿਆਨ, ਜਿਵੇਂ ਕਿ ਹੇਠਾਂ ਦਿਖਾਇਆ ਗਿਆ ਹੈ:

BEGIN ਕਰਮਚਾਰੀਆਂ ਵਿੱਚ ਦਾਖਲ ਕਰੋ (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) ਅੰਤ ਵਿੱਚ ਆਊਟ ਕਰੋ ਕੈਚ ਪ੍ਰਿੰਟ 'ਗਲਤੀ:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'ਕਰਮਚਾਰੀ ਮੇਲ', @recipients = 'hr@foo.com', @body = 'ਇੱਕ ਨਵਾਂ ਕਰਮਚਾਰੀ ਰਿਕਾਰਡ ਬਣਾਉਂਦੇ ਸਮੇਂ ਇੱਕ ਤਰੁੱਟੀ ਹੋਈ ਹੈ.', @subject = 'ਕਰਮਚਾਰੀ ਆਈਡੀ ਡੁਪਲੀਕੇਸ਼ਨ ਗਲਤੀ'; END ਕੈਚ

ਇਸ ਉਦਾਹਰਨ ਵਿੱਚ, ਕੋਈ ਵੀ ਗਲਤੀਆਂ ਵਾਪਰਦੀਆਂ ਹਨ, ਦੋਨੋ ਉਪਭੋਗੀ ਨੂੰ ਕਮਾਂਡ ਅਤੇ hr@foo.com ਈ-ਮੇਲ ਐਡਰੈੱਸ ਚਲਾਉਣ ਦੀ ਰਿਪੋਰਟ ਦਿੱਤੀ ਗਈ ਹੈ. ਉਪਭੋਗਤਾ ਨੂੰ ਦਿਖਾਇਆ ਗਿਆ ਗਲਤੀ ਹੇਠਾਂ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ:

ਗਲਤੀ: ਪ੍ਰਾਇਮਰੀ ਕੁੰਜੀ ਸੰਜੋਗ 'PK_employee_id' ਦੀ ਉਲੰਘਣਾ ਇਕਾਈ 'dbo.employees' ਵਿੱਚ ਡੁਪਲੀਕੇਟ ਕੁੰਜੀ ਨੂੰ ਸੰਮਿਲਿਤ ਨਹੀਂ ਕਰ ਸਕਦਾ. ਮੇਲ ਕਤਾਰਬੱਧ

ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ, ਐਪਲੀਕੇਸ਼ਨ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਆਮ ਤੌਰ ਤੇ ਜਾਰੀ ਰਹਿੰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਪ੍ਰੋਗ੍ਰਾਮਕਾਰ ਨੂੰ ਗਲਤੀ ਨਾਲ ਹੈਂਡਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ. TRY ... CATCH ਸਟੇਟਮੈਂਟ ਦੀ ਵਰਤੋਂ, SQL ਸਰਵਰ ਡਾਟਾਬੇਸ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਆਉਣ ਵਾਲੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਤਸਦੀਕ ਕਰਨ ਅਤੇ ਇਹਨਾਂ ਨੂੰ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨ ਲਈ ਇੱਕ ਸ਼ਾਨਦਾਰ ਤਰੀਕਾ ਹੈ.

ਵਧੇਰੇ ਸਿੱਖਣਾ

ਜੇਕਰ ਤੁਸੀਂ ਸਟ੍ਰਕਚਰਡ ਕੁਇਰੀ ਭਾਸ਼ਾ ਬਾਰੇ ਹੋਰ ਜਾਣਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਐਸੋਸੀਏਸ਼ਨ ਦੀ ਜਾਣਕਾਰੀ ਪੜ੍ਹੋ.