Вы можете обнаружить, что Crystal Reports обнюхивает SP для своей выходной подписи. Поскольку у него его нет (так как он скрыт внутри строки @sql), Crystal ничего не показывает.
Это, однако, предположение, так как я не использовал Crystal много лет. Вы можете проверить это, связавшись с этим SP и проверив, получите ли вы какие-либо результаты ...
CREATE PROCEDURE [dbo].[test] @mode AS INT
AS
DECLARE
@sql AS VARCHAR(MAX)
IF (@mode = 1)
SET @sql = 'SELECT ''This is mode one'' AS message'
ELSE
SET @sql = 'SELECT ''You may only specify mode one'' AS error'
EXEC(@sql)
GO
Если вы ничего не получаете от этого, у вас, похоже, нет иного выбора, кроме как реорганизовать свой дизайн более традиционным способом; Обрабатывать SP так же, как если бы вы работали с методом в объекте - входная подпись, принимающая значения, а не код, и имеющая фиксированную выходную подпись.