Ваша переменная @sql слишком мала.Измените свою декларацию на
DECLARE @sql NVARCHAR(4000)
, и все будет хорошо.Вы также можете попробовать удалить форматирование пробелами в выражении, чтобы оно выглядело следующим образом:
SET @sql = N'SELECT COUNT(1)
FROM
(SELECT
RANK() OVER(PARTITION BY D.cCitationNumber ORDER BY L.iPurgeLogId DESC) AS ROWNUM,
D.cCitationNumber,
D.vcFirstName, D.vcMiddleName, D.vcLastName,
D.vcNameSuffix, D.vcAddress1, D.vcAddress2,
D.vcCity, D.vcStateOrProvince, D.vcZipOrPostalCode,
D.cDriverLicenseNo, D.vcDriverLicenseState, D.vcTelephoneNo,
D.sdDateOfBirth, D.cGender, D.cEyeColor, D.cHairColor,
D.cWeight, D.cHeight, D.cRace, D.tNoOfPriorViolations,
D.cLicenseClass, D.sdLicIssue, D.sdLicExpire, D.iCountyID,
L.iPurgeLogId
FROM ' + QuoteName(@TableName) + ' D (NOLOCK)
INNER JOIN tblPurgeLog L (NOLOCK) ON L.cCitationNumber = D.cCitationNumber
WHERE L.dViolationDate BETWEEN ' + QuoteName(@dStartDate) + 'AND ' + QuoteName(@dEndDate) + '
AND L.iclientid ='+ QuoteName(@iClientID) +'
AND LTRIM(RTRIM(vcPurgeQueue)) = LTRIM(RTRIM(' + QuoteName(@cPurgeQueue) + ')) ) AS D
WHERE ROWNUM = 1 '
Но в этом случае SQL-код все еще слишком длинный для 512-символьной переменной.Он обрывается до того, как я нажимаю на оператор FROM, примерно на D.cLicenseClass, D.sdLicIssue, D.sdLicExpire,