2014-05-11 72 views
0

您好我正在開發一個簡單的表格與Countires,國家,城市的HTML下拉菜單。添加國家,國家,城市並更新它們,沒有問題。每件事情都很完美。問題在刪除時出現(假設取消激活)。平方米設計爲國家 - 國家 - 城市

我設計了這些表格,這些表格非常適合這種類型的國家,州,城市通過引用網站中的某些網站下拉。像:

Countries Table: 

    |SerialNo|CountryName|CountryId|Active| 

States Table 
    |SerialNo|StateName|StateId|CountryId|Active| 


CitiesTable: 
    |SerialNo|CityName|CityId|StateId|IsActive| 

因此,在停用任何國家的時候我在做積極=「假」,所以停用的國家都不會在我的網格顯示。如果這樣做的話,那些在各自國家的國家也應該失去正確的權利。

所以我做了這樣的: SQL查詢:

Update CountriesTable set Active='false' where CountryId= @CountryId 
Update StatesTable set Active='false' where CountryId= @CountryId 

正如我在兩個表我可以取消國家在已CountryId,美國兩tables.But我怎麼能取消或關閉狀態的城市?在Sql中有一個名爲Triggers的概念在特定表中的數據操作之後更新其他表,我是否可以通過觸發器實現我的要求,或者有什麼好的方法來實現它?

我如何存檔它?

我不想再添加一列CountryId到可持續發展 對不起,我的英語不好。希望我對你們都清楚!任何引用,任何Sql查詢,任何幫助非常感謝!

+0

請注意,並非所有國家都有州(或者至少國家和城市之間的領土分區並不總是被稱爲州)。你應該指出你正在使用哪個DBMS(儘管我確定它是MS SQL Server;哪個版本可能很重要,特別是如果它是過時的)。是的,如果你想要更新一個國家的狀態以傳播到州和城市,你將使用觸發器。但是,您的觸發器需要適應設置'IsActive ='true'';如果你這樣做,你不會希望觸發器將事物設置爲假。 –

+0

此外,如果存在實體,您將希望包含任何ISO信息 - 即[國家代碼](http://en.wikipedia.org/wiki/ISO_3166-1)。國家(國家分區)和城市可能有相同的信息。 –

回答

0

這是一個基本UPDATE語句設置正確的行IsActive列在表Cities對某一國家ID。

UPDATE Cities 
    SET IsActive = 'false' 
WHERE StateID IN (SELECT StateID FROM States WHERE CountryID = @CountryID); 

它可以在任何SQL DBMS中工作。可能會有其他符號使用連接符號,這將允許您以不同的方式編寫它。

您必須使用DBMS的相關語法將它併入您的DBMS的觸發器中。既然你沒有確定哪個數據庫管理系統,我們不能確定(雖然,正如我所指出的,它有一個很好的機會,它MS SQL服務器)。

或者你也可以重新設計架構和查詢,以使該國的IsActive狀態設置爲false,足以確保從該國州或城市不顯示 - 由Mitch Wheat在他的倡導answer

請注意,您的觸發器應考慮到國家再次變得活躍;使用'false'並不總是合適的。

+0

看起來很簡單... thanxxx !!! – user3452210

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;