变量作为运算符 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 的值必须是 ANDOR (否则 @SQL 的值将导致 NULL 而不会是 运行).

如果您需要参数化 Col1Col2 的值,那么它将是:

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;