NVARCHARである必要があるときに、VARCHARステートメントを使用してsp_executesqlを呼び出しているように聞こえます。
例えば@SQLはNVARCHARである必要があるため、これによりエラーが発生します
DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
だから:
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL