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、オプションの述語、 'option(再コンパイル)'です。 –