如何在连接查询 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
我想在我的 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