0
CREATE PROCEDURE GetUserDetails
(
@ParameterListWithDataType VARCHAR(MAX),
@ParameterNameList VARCHAR(MAX),
@ParameterValues VARCHAR(MAX),
@WhereCondition VARCHAR(MAX)
)
AS
BEGIN
DECLARE @sql NVARCHAR(4000)
SET @sql = ' SELECT FirstName, MiddleName, LastName, Address, Salary FROM UserDetails WHERE ' + @WhereCondition
EXEC sp_executesql @sql, @ParameterListWithDataType, @ParameterNameList
END
EXEC GetUserDetails @ParameterListWithDataType = '@FirstName VARCHAR(100)', @ParameterNameList = '@FirstName', @ParameterValues = 'ABC', @WhereCondition = 'FirstName = @FirstName '
EXEC GetUserDetails @ParameterListWithDataType = '@FirstName VARCHAR(100), @LastName VARCHAR(100)', @ParameterNameList = '@FirstName,@LastName', @ParameterValues = '''ABC'', ''XYZ''', @WhereCondition = 'FirstName = @FirstName OR LastName = @LastName'
EXEC GetUserDetails @ParameterListWithDataType = '@FirstName VARCHAR(100), @LastName VARCHAR(100), @MiddleName VARCHAR(100)', @ParameterNameList = '@FirstName,@LastName,@MiddleName', @ParameterValues = '''ABC'', ''XYZ'', ''DEF''', @WhereCondition = 'FirstName = @FirstName OR LastName = @LastName OR MiddleName = @MiddleName'
是否有任何方法可以做到这一点?因为搜索条件将是动态的。请给出您的评论或给我使用sp_executesql
动态数量的参数的替代解决方案。使用带动态参数的sp_executesql
在此先感谢。
为什么不使用视图的过程?这似乎只会使过滤没有任何好处变得更加复杂。 – adrianm
@adrianm我没有明白你的观点。因为用于搜索条件的列将是动态的。我不知道如何使用视图来实现这一点。 – Vignesh
'@ ParameterListWithDataType'的'Nvarchar'。正常的解决方案是:静态SQL,可选谓词和'选项(重新编译)'。 –