2011-02-06 16 views
0

私はチャートに距離テーブル/チャートを作成しました。 は、私は今、問題は1、市内の都市のIDでギャップを作るを削除しなかった場合にのみ動作するということである。このテーブルのIDのリストを作成して、IDを繰り返して別のテーブルで使用する方法

ALTER PROCEDURE dbo.sup_InsertCity 
    
    (
    @cityName nvarChar(50) 
   ) 
    
AS 
    Insert into citiesTest (cityName) 
    values (@cityName) 
    

    declare @counter int 
    declare @cityNumber int 
    declare @cityID int 
    SELECT @cityNumber = COUNT(idCities) FROM citiesTest 
    SELECT @cityID = @@Identity    
    set @counter = 0 
    while @counter < @cityNumber 
    begin 
      set @counter = @counter + 1 
     /* 
      
      
     */ 
        insert into DistanceTest (CityTop, CityRight, Distance, time) 
        values (@cityID, @counter, 0, 0) 
        insert into DistanceTest (CityTop, CityRight, Distance, time) 
        values (@counter, @cityID, 0, 0) 
    end 

RETURN 

ような何かを行くMSSQLのストアドプロシージャを作成しました。コースを行う代わりに、もう一つのテーブルにIDのコレクションをスローして、第二の都市として割り当てたいと思います。あなたのために、この作品のような

+0

申し訳ありません。私は家にいるときに質問をきれいにするでしょう。しかし、誰かが私に助言を与えることができるかもしれません。 –

+0

あなたの挿入物はちょっと変わっています。あなたは '@ counter'と' @ cityId'を 'CityTop'と' CityRight'に挿入して、それらを別の順序で再び挿入します。あなたのクエリが達成すべきものを簡単に説明できますか? – Oded

+0

Alan Oded、この距離図には、2都市からの距離が表示されます。新しい都市が追加されると、両方向からの距離を挿入する必要があります。都市Aから都市Bへ、都市Bから都市Aへの意味。それで私は2つのインサートを持っているのです。 –

答えて

2

なりの何か:悪い文法と醜い質問私が入力するダムが、便利なアプリを使用していますため

Declare @CityId int 

Insert CitiesTest(cityName) 
Values(@cityName) 

Set @CityId = SCOPE_IDENTITY() 

Insert DistanceTest(CityTop, CityRight, Distance, Time) 
Select @CityId, CityId, 0, 0 
From CitiesTest 
Where CityId <> @CityId 
Union All 
Select CityId, @CityId, 0, 0 
From CitiesTest 
Where CityId <> @CityId 
+0

@ Yaron Buki:これは実際にSPのすべてのコードを置き換えます。新しい 'DistanceTest'レコードは、あなたが使用したループよりはるかに優れた単一のINSERT命令を使って挿入され、都市ID間のギャップについて心配する必要はありません。 –

+0

これはより良いスクリプトでした。 CityAを作成するInsertとCityBを同じ都市として作成するだけのInsertが不足していました。サクラメントからサクラメントまでの距離を意味します。最後に、@ idCity、@ idCity、0、0を挿入する挿入を追加しました。 –

+0

@Yaron Buki - (@ CityId、@ CityId、0 0)が有効な組み合わせであれば、Where節の1つを取り出してください。別のインサートの必要はありません。 – Thomas

関連する問題