Как добавить переменные в Dynamic Sql, а не объединить их? - PullRequest
1 голос
/ 13 ноября 2009

У меня есть следующий динамический SQL-оператор, где я хочу добавить @StartRowIndex + @MaximumRows и вычесть из него 1. Мне неясно, куда поместить одинарные кавычки в заявлении. Вот оно:

SET @sql = @sql + ' SELECT *
 FROM
LicenseInfo
WHERE RowNum 
BETWEEN ' + @StartRowIndex + ' AND ' + 
'(' + @StartRowIndex + @MaximumRows + ')'  -  1
+ ' ORDER BY cnt desc'

Ответы [ 3 ]

3 голосов
/ 13 ноября 2009

Создайте новую переменную @EndRowIndex и рассчитайте ее перед построением динамического оператора SQL.

Что-то вроде:

DECLARE @EndRowIndex int

SET @EndRowIndex = @StartRowIndex + @MaximumRows - 1

SET @sql = @sql + ' SELECT *
 FROM
LicenseInfo
WHERE RowNum 
BETWEEN ' + @StartRowIndex + ' AND ' + @EndRowIndex 
+ ' ORDER BY cnt desc'
2 голосов
/ 13 ноября 2009

Объявите переменную, выполните вычисления и CAST ее в varchar при генерации оператора SQL

DECLARE @LastRowIndex int

SET @LastRowIndex = @StartRowIndex + @MaximumRows - 1

SET @sql = @sql + ' 
SELECT *
FROM LicenseInfo
WHERE 1=1
AND RowNum BETWEEN ' + CAST (@StartRowIndex as VarChar) + 
' AND ' + CAST (@LastRowIndex as VarChar)
+ ' ORDER BY cnt DESC'

Необходимо выполнить приведение, чтобы позволить SQL Server объединять строковые значения, в противном случае он попытается преобразовать nVarChar в число и попытаться добавить их в виде чисел.

2 голосов
/ 13 ноября 2009

Вам нужно привести параметры int в varchar

SET @sql = @sql + ' SELECT *
 FROM
LicenseInfo
WHERE RowNum 
BETWEEN ' + @StartRowIndex + ' AND ' + 
'(' + CAST(@StartRowIndex as varchar(10)) + CAST(@MaximumRows as varchar(10)) + ') - 1  
 ORDER BY cnt desc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...