首页 新闻 会员 周边 捐助

根据TableA的结果,Delete TableB 中对应的项

0
悬赏园豆:50 [已解决问题] 解决于 2013-03-21 09:51

关系Table 结构:

IF OBJECT_ID('dbo.BT_LinksRolesRelation') IS NOT NULL DROP TABLE dbo.BT_LinksRolesRelation;
GO
CREATE TABLE BT_LinksRolesRelation(
Role_Id INT REFERENCES BT_Role(Role_Id),
Link_Id INT REFERENCES BT_Link(Link_Id),
PRIMARY KEY(Role_Id, Link_Id)
)

临时中间表@tempRoleLinkTable:
DECLARE @tempRoleLinkTable TABLE(
Role_Id int,
Link_Id int
)

给中间表@tempRoleLinkTable插入值,条件是外界传入值 Link_Id (3,14,25,36),Role_Id = 3,这些LInk_Id 取值个数 会变化,Role_Id取值会变化,但结构是不变的;如果外界传入的值构成的那条记录在关系Table中存在,就把 条记录保存到临时表@tempRoleLinkTable中:
INSERT INTO @tempRoleLinkTable(Role_Id,Link_Id)
SELECT Role_Id,Link_Id
FROM BT_LinksRolesRelation AS BT
WHERE BT.Role_Id = 3 AND BT.Link_Id IN (3,14,25,36)

如果关系表中Link_ID 有 3,14,25三条,  则插入到临时表中的数据为 3,14,25;  36这条数据在关系表中不存在,那么就没有被插入临时表中去.

从关系表中删除条目,这些要被删除的条目是刚被先出来插入临时表中的条目:

DELETE FROM BT_LinksRolesRelation WHERE (Role_Id,Link_Id) in
(
 SELECT  Role_Id,Link_Id
 FROM @tempRoleLinkTable

)
上面不能够根据条件去删除,错误出现在什么地方呢? 正确的删除SQL语句应该怎么写呢?

求大侠指点。。。

小笔头大做用的主页 小笔头大做用 | 初学一级 | 园豆:149
提问于:2013-02-08 17:56
< >
分享
最佳答案
0

换了一种方法来解决这个问题,以前想批次性处理请求! 现在用ajax一个一个的处理请求,所以传入的Link_ID是一个了,后台再用存储过程来解决这个问题,唯一不好的就是访问数据库次数多了,花时间大了一点儿,而存储过程!又稍微缓解了一下..

小笔头大做用 | 初学一级 |园豆:149 | 2013-02-10 02:53
其他回答(2)
0

语法

DELETE FROM 表名称 WHERE 列名称 = 值

======================================

比如说、、删除某行

DELETE FROM Person WHERE LastName = 'Wilson'

或者 删除所有行

DELETE FROM table_name

或者:

DELETE * FROM table_name
收获园豆:25
@ndy | 园豆:157 (初学一级) | 2013-02-09 00:12
0
DELETE t1 FROM BT_LinksRolesRelation t1

JOIN @tempRoleLinkTable  t2

ON t1.Role_Id = t2.RoleId and t1.Link_Id = t2.LinkId

 

收获园豆:25
gunsmoke | 园豆:3592 (老鸟四级) | 2013-02-11 10:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册