SqL国家设计 - 国家 - 城市

时间:2014-05-11 06:46:05

标签: sql

您好我正在为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查询,任何帮助非常赞赏!!!

2 个答案:

答案 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'并不总是合适的。