2016-01-25 6 views
11
IF @SQL IS NOT NULL 
BEGIN 
    BEGIN TRY 
     EXEC sp_executesql @SQL 
     PRINT 'SUCCESS: ' + @SQL 
    END TRY 
    BEGIN CATCH 
     SET @ErrorMessage = 
        N'Error dropping constraint' + @CRLF 
        + 'Table ' + @TableName + @CRLF 
        + 'Script: ' + @SQL + @CRLF 
        + 'Error message: ' + ERROR_MESSAGE() + @CRLF 
     THROW 50100, @ErrorMessage, 1; 
    END CATCH 
END 

CATCH कार्यान्वित, मैं निम्नलिखित त्रुटि मिलती है जब:गलत वाक्य रचना के पास 'थ्रो'

Msg 102, Level 15, State 1, Line 257
Incorrect syntax near 'THROW'.

PRINT @ErrorMessage काम करता है के साथ THROW की जगह।

एक शाब्दिक स्ट्रिंग कार्यों के साथ @ErrorMessage परिवर्तनीय को बदलना।

दस्तावेज़ों के मुताबिक, THROW एक चर लेने में सक्षम होना चाहिए। सुनिश्चित नहीं है कि इसका क्या करना है।

उत्तर

16

MSDN से:

The statement before the THROW statement must be followed by the semicolon (;) statement terminator.

+7

मुझे लगता है कि मैं इसे वर्तनी दूंगा; अब से थ्रो। धन्यवाद! – Metaphor

+1

अच्छी योजना। यह वास्तव में परेशान है जब कुछ कीवर्ड के लिए विशेष नियम हैं और शेष के लिए नहीं। –

4

Documentation on THROW, Remarks से:

The statement before the THROW statement must be followed by the semicolon (;) statement terminator.

यह एक अच्छी आदत हमेशा एक सेमी-कोलन के साथ अपने बयान समाप्त करने के लिए है।

+1

"अर्ध-कॉलन के साथ हमेशा अपने बयान समाप्त करने की अच्छी आदत है।" निश्चित रूप से, लेकिन यह वास्तव में अजीब है कि 'अर्धविराम' के साथ 'स्टार्ट' को समाप्त करना होगा, अगर @@ rowcount = 0 फेंक ###, '', #अंत' – Timbo

+0

@ टिम्बो 'BEGIN' नहीं है बयान। 'BEGIN' और' END' नियंत्रण-के-प्रवाह भाषा कीवर्ड हैं। –

+0

यही कारण है कि मुझे यह अजीब लगता है कि निर्माण अर्धविराम से समाप्त होने के लिए 'शुरू' करना चाहता है। – Timbo

संबंधित मुद्दे