动态查询 'in clause' 参数无效
Dynamic query 'in clause' parameter not working
我在存储过程中使用动态查询。我传递了两个参数,一个用于 "equal case",另一个用于 "in case"。如图所示,如果情况不工作,而相同的情况正在工作。有什么方法可以将 "in case" 的参数放入查询中。
这是我更好编辑的过程。
Alter PROCEDURE [dbo].[Test_In_Clause]
-- Add the parameters for the stored procedure here
@name nvarchar(50) = NULL,
@class nvarchar(50) = NULL
AS
BEGIN
declare
@sql nvarchar(max),
@ParameterDef NVARCHAR(500)
set @ParameterDef = '@name nvarchar(50),
@class nvarchar(50)'
set @sql = 'Select * from aaa_Students where Name = @name and Class in @class'
print @sql
exec sp_Executesql @sql, @ParameterDef, @name = @name, @class = @class
END
PS:为了保护sql注入,我不想使用Select * from aaa_Students where Name = @name and Class in ('+ @class +')
格式。
试试这个:
alter PROCEDURE [dbo].[Test_In_Clause]
-- Add the parameters for the stored procedure here
@name nvarchar(50) = NULL,
@class nvarchar(50) = NULL
AS
BEGIN
declare
@sql nvarchar(max),
@ParameterDef NVARCHAR(500)
set @ParameterDef = N'@name nvarchar(50),
@class nvarchar(50)'
set @sql = 'Select * from aaa_Students where Name = @name and Class in (@class)'
print @sql
execute sp_Executesql @sql, N'@name nvarchar(50),@class nvarchar(50)', @name = @name, @class = @class
我在存储过程中使用动态查询。我传递了两个参数,一个用于 "equal case",另一个用于 "in case"。如图所示,如果情况不工作,而相同的情况正在工作。有什么方法可以将 "in case" 的参数放入查询中。
这是我更好编辑的过程。
Alter PROCEDURE [dbo].[Test_In_Clause]
-- Add the parameters for the stored procedure here
@name nvarchar(50) = NULL,
@class nvarchar(50) = NULL
AS
BEGIN
declare
@sql nvarchar(max),
@ParameterDef NVARCHAR(500)
set @ParameterDef = '@name nvarchar(50),
@class nvarchar(50)'
set @sql = 'Select * from aaa_Students where Name = @name and Class in @class'
print @sql
exec sp_Executesql @sql, @ParameterDef, @name = @name, @class = @class
END
PS:为了保护sql注入,我不想使用Select * from aaa_Students where Name = @name and Class in ('+ @class +')
格式。
试试这个:
alter PROCEDURE [dbo].[Test_In_Clause]
-- Add the parameters for the stored procedure here
@name nvarchar(50) = NULL,
@class nvarchar(50) = NULL
AS
BEGIN
declare
@sql nvarchar(max),
@ParameterDef NVARCHAR(500)
set @ParameterDef = N'@name nvarchar(50),
@class nvarchar(50)'
set @sql = 'Select * from aaa_Students where Name = @name and Class in (@class)'
print @sql
execute sp_Executesql @sql, N'@name nvarchar(50),@class nvarchar(50)', @name = @name, @class = @class