将sp_executeSQL的参数值部分指定为参数

Sun*_*nil 2 sql-server-2008-r2 sp-executesql

我正在使用SQL Server 2008 R2.我需要在下面的T-SQL的最后部分使用一个参数.

在这部分中,指定了sp_executesql的参数值,但我想动态提供它.

EXECUTE sp_executesql @sql,N'@startIndex1 int,@maxRows1 int',
                      @startIndex1 = @startIndex,@maxRows1 = @maxRows--LAST PART
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 10

根据你的进一步解释,我认为你正在使它变得更加复杂.您可以执行以下操作:

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;
Run Code Online (Sandbox Code Playgroud)

这没有问题 - 任何未在实际语句中使用的参数都只是被删除和忽略.