प्रश्न (बी) का उत्तर देना आसान है - आप जो सामना कर रहे हैं वह एक संकलन-समय की जांच है, जो रन-टाइम पर काम करने वाले TRY-CATCH को रौंद देता है।
(ए)
. के लिएDECLARE @L_ID_FOO_BAR INT;
DECLARE @SQL NVARCHAR(MAX) = '
SELECT @L_ID_FOO_BAR = IDFOO
FROM BAR
WHERE IDFOO = 5';
BEGIN TRY
EXEC sp_executesql @SQL, N'@L_ID_FOO_BAR INT output', @L_ID_FOO_BAR output;
END TRY
BEGIN CATCH
SELECT @L_ID_FOO_BAR = NULL -- redundant? it starts with NULL
END CATCH