变量作为运算符 mssql
Variable as operator mssql
我想像这样使用变量作为运算符;
DECLARE @OP VARCHAR(3) = 'AND' -- THIS COULD BE 'AND','OR'
SELECT * FROM tblName WHERE Col1 = 1 @OP Col2 = 3
显然我不能像这样使用 VARCHAR,我唯一能想到的就是 SQL 注入,但我想知道是否有更简单的解决方案。
请你帮忙。
您可以尝试执行动态 SQL,但即使没有动态 SQL:
我们也可以这样做
SELECT *
FROM tblName
WHERE
(@OP = 'AND' AND Col1 = 1 AND Col2 = 3) OR
(@OP = 'OR' AND (Col1 = 1 OR Col2 = 3));
为了完成,动态 SQL 解决方案将是:
DECLARE @Op nvarchar(3) = N'AND';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT * FROM TblName WHERE Col1 = 1 ' + CASE WHEN @OP IN (N'AND',N'OR') THEN @OP END + N' Col2 = 3;';
EXEC sp_executesql @SQL;
CASE
是为了避免注入,因为 @Op
的值必须是 AND
或 OR
(否则 @SQL
的值将导致 NULL
而不会是 运行).
如果您需要参数化 Col1
和 Col2
的值,那么它将是:
DECLARE @OP nvarchar(3) = N'AND';
DECLARE @SQL nvarchar(MAX);
DECLARE @col1 int = 1, @col2 int =3;
SET @SQL = N'SELECT * FROM TblName WHERE Col1 = @dCol1 ' + CASE WHEN @OP IN (N'AND',N'OR') THEN @OP END + N' Col2 = @dCol2;';
EXEC sp_executesql @SQL,N'@dCol1 int, @dCol2 int', @dCol1 = @Col1, @dCol2 = @Col2;
我想像这样使用变量作为运算符;
DECLARE @OP VARCHAR(3) = 'AND' -- THIS COULD BE 'AND','OR'
SELECT * FROM tblName WHERE Col1 = 1 @OP Col2 = 3
显然我不能像这样使用 VARCHAR,我唯一能想到的就是 SQL 注入,但我想知道是否有更简单的解决方案。
请你帮忙。
您可以尝试执行动态 SQL,但即使没有动态 SQL:
我们也可以这样做SELECT *
FROM tblName
WHERE
(@OP = 'AND' AND Col1 = 1 AND Col2 = 3) OR
(@OP = 'OR' AND (Col1 = 1 OR Col2 = 3));
为了完成,动态 SQL 解决方案将是:
DECLARE @Op nvarchar(3) = N'AND';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT * FROM TblName WHERE Col1 = 1 ' + CASE WHEN @OP IN (N'AND',N'OR') THEN @OP END + N' Col2 = 3;';
EXEC sp_executesql @SQL;
CASE
是为了避免注入,因为 @Op
的值必须是 AND
或 OR
(否则 @SQL
的值将导致 NULL
而不会是 运行).
如果您需要参数化 Col1
和 Col2
的值,那么它将是:
DECLARE @OP nvarchar(3) = N'AND';
DECLARE @SQL nvarchar(MAX);
DECLARE @col1 int = 1, @col2 int =3;
SET @SQL = N'SELECT * FROM TblName WHERE Col1 = @dCol1 ' + CASE WHEN @OP IN (N'AND',N'OR') THEN @OP END + N' Col2 = @dCol2;';
EXEC sp_executesql @SQL,N'@dCol1 int, @dCol2 int', @dCol1 = @Col1, @dCol2 = @Col2;