Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL TRY-CATCH und die fehlenden Spalten

Frage (b) ist einfacher zu beantworten - was Sie dort sehen, ist eine Prüfung zur Kompilierzeit, die TRY-CATCH übertrumpft, die zur Laufzeit funktioniert.

Für (a)

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