如何在连接查询 SQL 服务器上添加我的条件

How to add my condition on concatenated query SQL Server

我想在我的 SQL Server 查询中添加我的动态条件,但发现我应该使用串联查询。

我是串联查询的新手。下面是我尝试过但系统错误不正确的查询。

DECLARE @value VARCHAR(500) = ' and ID IN (1,2)';
DECLARE @sql VARCHAR(MAX);


SET @sql = '
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, ''ab''),
(2, 300, ''ab''),
(3, -150, ''ac''),
(4, 200, ''ab'');

select SUM(Amount)
from @table
where name = ''ab'' ''' + @value + ''';';
EXEC (@sql);

在我的串联查询中添加条件查询变量的正确方法是什么。

您可以删除多余的引号:

where name = ''ab'' ' + @value + ';';

您的代码有问题:

  • delete 语句末尾缺少分栏
  • where name = ''ab'' 之后和代码
  • 末尾提取引用

这应该有效:

DECLARE @value VARCHAR(500) = ' and ID IN (1,2)';
DECLARE @sql VARCHAR(MAX);

SET @sql = '
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table;
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, ''ab''),
(2, 300, ''ab''),
(3, -150, ''ac''),
(4, 200, ''ab'');

select SUM(Amount)
from @table
where name = ''ab'' ' + @value + ';';
EXEC(@sql);

备注:

  • 这称为动态SQL而不是串联查询
  • 调试此类代码的一个简单方法是将 EXEC(@sql) 命令替换为 SELECT @sql,这样您就可以看到您的代码生成的 SQL;在this DB Fiddle中,可以看到结果:
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table;
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, 'ab'),
(2, 300, 'ab'),
(3, -150, 'ac'),
(4, 200, 'ab');

select SUM(Amount)
from @table
where name = 'ab'  and ID IN (1,2);

您好使用下面修改查询

DECLARE @value VARCHAR(500) = ' and ID IN (1,2)';
DECLARE @sql VARCHAR(MAX);


SET @sql = '
DECLARE @table TABLE
(
    ID INT,
    Amount INT,
    Name VARCHAR(500)
);

DELETE FROM @table
INSERT INTO @table
(
    ID,
    Amount,
    Name
)
VALUES
(1, 200, ''ab''),
(2, 300, ''ab''),
(3, -150, ''ac''),
(4, 200, ''ab'');

select SUM(Amount)
from @table
where name = ''ab''' + @value+';'
EXEC (@sql);

查询输出:500