是否可以动态地向 sp_ExecuteSql 提供参数列表?
在 sp_ExecuteSql 中,查询和参数定义是字符串。我们可以为这些使用字符串变量,并传入我们想要执行的任何查询和参数定义。但是,在为参数赋值时,我们似乎不能使用字符串或字符串变量作为参数名称。
例如:
DECLARE @SelectedUserName NVARCHAR(255) ,
@SelectedJobTitle NVARCHAR(255);
SET @SelectedUserName = N'TEST%';
SET @SelectedJobTitle = N'%Developer%';
DECLARE @sql NVARCHAR(MAX) ,
@paramdefs NVARCHAR(1000);
SET @sql = N'select * from Users where Name LIKE @UserName '
+ N'and JobTitle LIKE @JobTitle;'
SET @paramdefs = N'@UserName nvarchar(255), @JobTitle nvarchar(255)';
EXEC sp_ExecuteSql @sql, @paramdefs, @UserName = @SelectedUserName,
@JobTitle = @SelectedJobTitle;
查询@sql 和参数定义@paramdefs 可以作为字符串变量动态传递到sp_ExecuteSql。但是,在我看来,在为参数赋值时,我们不能动态赋值,并且必须始终提前知道参数的数量及其名称。请注意,在我的示例中,我如何动态声明参数 @UserName 和 @JobTitle 并将该声明作为字符串变量传递,但是当我想设置参数名称时,我必须显式指定它们。有没有办法绕过这个限制?
我希望能够动态声明参数并动态分配给它们。就像是:
EXEC sp_ExecuteSql @sql, @paramdefs,
N'@UserName = @SelectedUserName, @JobTitle = @SelectedJobTitle';
请注意,这实际上不起作用,但说明了我希望发生的事情。如果这种事情有效,那么我可以传递具有不同名称的不同数量参数的不同查询。整个事情将是动态的,我不必事先知道参数的名称或数量。