您好我正在为Countires,States,Cities开发一个带有HTML下拉菜单的简单表单。添加国家,州,城市并更新它们,没有任何问题。每件事都很完美。问题在删除时出现(让我们说停用)。
通过引用网络中的一些网站,我设计了适合此类国家,州,城市下拉列表的表格。像:
Countries Table:
|SerialNo|CountryName|CountryId|Active|
States Table
|SerialNo|StateName|StateId|CountryId|Active|
CitiesTable:
|SerialNo|CityName|CityId|StateId|IsActive|
因此,在停用任何国家时,我正在使Active =" false",因此停用的国家/地区不会显示在我的网格中。如果这样做,各自国家的国家也应该成为停用权。
所以我喜欢这样: SQL查询:
Update CountriesTable set Active='false' where CountryId= @CountryId
Update StatesTable set Active='false' where CountryId= @CountryId
由于我在两个表中都有CountryId,我可以在两个表中停用国家/地区。但是,如何停用已停用状态的城市?在Sql中有一个名为Triggers的概念,它在特定表中的数据操作之后更新其他表,我可以用Triggers实现我的要求,还是有任何好的方法来实现它?
我怎么能得到它?
我不想再添加一个CountryId列到citiestable 对不起,我的英语不好。希望大家都清楚!任何引用,任何Sql查询,任何帮助非常赞赏!!!
答案 0 :(得分:1)
不需要触发器。选择States
时,请加入Countries
并过滤国家/地区IsActive
SELECT *
FROM Countries
WHERE IsActive <> False;
SELECT s.*
FROM States s
INNER JOIN Countries c on c.CountryId = s.CountryId
WHERE c.IsActive <> False;
答案 1 :(得分:0)
这是一个基本UPDATE
语句,用于为IsActive
表中的给定国家/地区ID设置正确行的Cities
列。
UPDATE Cities
SET IsActive = 'false'
WHERE StateID IN (SELECT StateID FROM States WHERE CountryID = @CountryID);
它几乎适用于任何SQL DBMS。可能还有其他使用连接符号的符号,可以让您以不同的方式编写它。
您必须使用DBMS的相关语法将其合并到DBMS的触发器中。由于您没有确定哪个DBMS,我们无法确定(但是,正如我所指出的那样,MS SQL Server的可能性很大)。
或者您可以重新设计架构和查询,以便将国家/地区的IsActive
州设置为false足以确保不显示该国家/地区的州或城市 - 正如{{3}所倡导的那样在他的Mitch Wheat。
请注意,您的触发器应该考虑再次变为活跃状态的国家/地区使用'false'
并不总是合适的。