关系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语句应该怎么写呢?
求大侠指点。。。
换了一种方法来解决这个问题,以前想批次性处理请求! 现在用ajax一个一个的处理请求,所以传入的Link_ID是一个了,后台再用存储过程来解决这个问题,唯一不好的就是访问数据库次数多了,花时间大了一点儿,而存储过程!又稍微缓解了一下..
语法
DELETE FROM 表名称 WHERE 列名称 = 值
======================================
比如说、、删除某行
DELETE FROM Person WHERE LastName = 'Wilson'
或者 删除所有行
DELETE FROM table_name
或者:
DELETE * FROM table_name
DELETE t1 FROM BT_LinksRolesRelation t1 JOIN @tempRoleLinkTable t2 ON t1.Role_Id = t2.RoleId and t1.Link_Id = t2.LinkId