1

我有以下动态 sql 语句,我想在其中添加 @StartRowIndex + @MaximumRows 并从中减去 1。我不清楚在声明中将单引号放在哪里。这里是:

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

3 回答 3

3

@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'
于 2009-11-12T21:26:21.867 回答
2

您需要将 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'
于 2009-11-12T21:31:50.073 回答
2

声明一个变量,在生成 SQL 语句时进行计算并将其转换为 varchar

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 转换为数字并尝试将它们添加为数字。

于 2009-11-12T21:37:39.863 回答