私はいくつかのパラメータを取るSQLストアドプロシージャを持っています。そこに私は=
、<
、>
のような条件を渡す必要があり、それらをクエリで使用する必要があります。比較演算子をパラメータとして渡し、SQLストアドプロシージャで直接使用します。
現在、私は何が条件であるかを確認し、それに応じてクエリの一部を変更します。私はパラメータとして条件を渡し、クエリで直接使用したいと思います。
@software_type nvarchar(50),
@software_id nvarchar(50),
@condition char,
@version_id float
クエリ:
DECLARE
@BaseQuery nvarchar(max) = N'SELECT DISTINCT Installed_Software.vm_name FROM Installed_Software INNER JOIN Software ON Installed_Software.software_id = Software.software_id INNER JOIN Software_Version ON Installed_Software.software_id = Software_Version.software_id AND Installed_Software.version_id = Software_Version.version_id AND Software.software_id = Software_Version.software_id',
@WhereClause nvarchar(max) = ' WHERE 1=1',
@ParamList nvarchar(max) = N'@sfType nvarchar(50),@sfId nvarchar(50),@verId float,@cond char'
IF @software_type IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' AND Software.software_type = @sfType';
END
IF @software_id IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' AND [email protected]';
END
IF @version_id IS NOT NULL AND @condition IS NOT NULL
BEGIN
IF @condition = '='
BEGIN
SET @WhereClause = @WhereClause + ' AND Installed_Software.version_id = @verId';
END
ELSE IF @condition ='>'
BEGIN
SET @WhereClause = @WhereClause + ' AND Installed_Software.version_id > @verId';
END
ELSE IF @condition='<'
BEGIN
SET @WhereClause = @WhereClause + ' AND Installed_Software.version_id < @verId';
END
ELSE IF @condition = '>='
BEGIN
SET @[email protected] + ' AND Installed_Software.version_id >= @verId';
END
ELSE IF @condition='<='
BEGIN
SET @WhereClause = @WhereClause + ' AND Installed_Software.version_id <= @verId';
END
ELSE
BEGIN
SET @WhereClause = @WhereClause + ' AND Installed_Software.version_id = @verId';
END
END
SET @BaseQuery = @BaseQuery + @WhereClause;
EXECUTE sp_executesql @BaseQuery, @ParamList, @[email protected]_type, @[email protected]_id, @[email protected]_id;
私がやりたいことは、このようなものです:
これは私がこれらのパラメータを渡している、私が今やっている方法を
です
IF @version_id IS NOT NULL AND @condition IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' AND Installed_Software.version_id' + '@condition' + '@version_id';
END
これは可能ですか?
それが参考になる:
は、私は次のクエリは、動的SQLバージョンと同じ結果を返すべきであると信じています。 MySQL? MSSQL? – JRLambert
[蹴るのに習慣が悪い](長さなしのVARCHARの宣言)(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length .aspx) - あなたが使用する 'char/varchar'変数とパラメータの長さを常に**提供するべきです。現在、パラメータ '@ condition'はちょうど' CHAR'なので、**正確に1つの長さ**の文字列になります。だから、 '> ='を条件として渡そうとすると '>'だけに切り捨てられています。 –
@ JRLamberそれはMSSQL –