我正在使用 SQL Server 2008 R2。我需要为下面的 T-SQL 的最后一部分使用一个参数。
在这一部分中,指定了 sp_executesql 的参数值,但我想动态地提供它。
EXECUTE sp_executesql @sql,N'@startIndex1 int,@maxRows1 int',
@startIndex1 = @startIndex,@maxRows1 = @maxRows--LAST PART
我正在使用 SQL Server 2008 R2。我需要为下面的 T-SQL 的最后一部分使用一个参数。
在这一部分中,指定了 sp_executesql 的参数值,但我想动态地提供它。
EXECUTE sp_executesql @sql,N'@startIndex1 int,@maxRows1 int',
@startIndex1 = @startIndex,@maxRows1 = @maxRows--LAST PART
根据您的进一步解释,我认为您使这变得比必须的更复杂。您可以执行以下操作:
DECLARE @p1 INT = 5, @p2 INT = 3, @p3 INT = NULL;
DECLARE @sql NVARCHAR(MAX) = N'SELECT cols FROM dbo.table WHERE @p1 = @p1';
SET @sql += CASE WHEN @p2 IS NOT NULL THEN N' AND @p2 = @p2' ELSE '' END;
SET @sql += CASE WHEN @p3 IS NOT NULL THEN N' AND @p3 = @p3' ELSE '' END;
EXEC sp_executesql @sql, N'@p1 INT, @p2 INT, @p3 INT', @p1, @p2, @p3;
这不会有任何问题 - 实际语句中未使用的任何参数都只会被删除和忽略。