Попробуйте использовать print, чтобы увидеть созданный вами SQl, тогда вы, скорее всего, увидите ошибку. И стараться изо всех сил, чтобы избежать динамического SQL, трудно поддерживать, тестировать и отлаживать должным образом.
Вместо того, чтобы exec SQl просто сделать это:
Печать @ SQL
Это напечатает инструкцию SQL.
Обычно у нас есть параметр отладки в любом хранимом процессе, который использует динамический SQl abd, если он установлен в 1, он печатает SQL, а если он установлен в 0 (по умолчанию), он выполняет SQL. Это облегчает просмотр того, что создается для набора значений, позже, когда процесс перестает работать из-за неясного условия, которое вы не рассмотрели.
Вы также можете запустить SQl, запустив профилировщик, но обычно проще запустить те же значения в режиме отладки.