Tedi telah diberikan satu teka-teki mencabar.

Bagaimanakah untuk masukkan data daripada 3 table ke dalam satu table sahaja menggunakan SQL statement?

Ini adalah hasil perahan otak Tedi, menggunakan stored procedure dalam MS SQL Server.

Ideanya adalah untuk loop table tu satu persatu dan assignkan setiap value ke dalam variable sementara, dan kemudian masukkan kesemuanya ke dalam satu table.

cara masukkan data daripada 3 table berasingan ke dalam 1 table.

Untuk loop Tedi gunakan cursor yang masalahnya adalah perlu diisytiharkan secara berasingan dalam blok masing-masing.

Ini adalah contoh hasil kerja Tedi.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
USE NamaDatabase
GO
DELETE NamaDatabase.dbo.NamaTableDestinasi
GO
DROP PROC NamaStoredProcedure
GO
CREATE PROC NamaStoredProcedure
 
AS
  BEGIN
  SET nocount  ON
    DECLARE @FromStation INT, @ToStation INT, @UserCategoryId VARCHAR(1)

    DECLARE Cursor_Pertama CURSOR FOR SELECT StationId FROM Station WHERE ServiceProviderId='XXXX' GROUP BY StationId ORDER BY StationId ASC

    OPEN Cursor_Pertama
    FETCH NEXT FROM Cursor_Pertama INTO @FromStation
    WHILE @@FETCH_STATUS = 0
    BEGIN
        --- TO
        DECLARE Cursor_Kedua CURSOR FOR SELECT StationId FROM Station WHERE ServiceProviderId='XXXX' GROUP BY StationId ORDER BY StationId ASC
        OPEN Cursor_Kedua
        FETCH NEXT FROM Cursor_Kedua INTO @ToStation
        WHILE @@FETCH_STATUS = 0
        BEGIN
            ---- user category
            DECLARE Cursor_Ketiga CURSOR FOR SELECT UserCatgoryID FROM NamaDatabase.dbo.UserCategory ORDER BY UserCatgoryID ASC
            OPEN Cursor_Ketiga
            FETCH NEXT FROM Cursor_Ketiga INTO @UserCategoryId
            WHILE @@FETCH_STATUS = 0
            BEGIN
                -- INSERT ketiga-tiga values ke dalam NamaTableDestinasi 
                INSERT INTO NamaDatabase.dbo.NamaTableDestinasi VALUES (@FromStation,@ToStation,@UserCategoryId)
                -- INSERT
                FETCH NEXT FROM Cursor_Ketiga INTO @UserCategoryId
            END
            CLOSE Cursor_Ketiga
            DEALLOCATE Cursor_Ketiga
            -- user category
            FETCH NEXT FROM Cursor_Kedua INTO @ToStation
        END
        CLOSE Cursor_Kedua
        DEALLOCATE Cursor_Kedua
        --- TO
        FETCH NEXT FROM Cursor_Pertama INTO @FromStation
    END
    CLOSE Cursor_Pertama
    DEALLOCATE Cursor_Pertama

  END -- SPROC
GO
-- Stored procedure execution - test stored procedure
EXEC NamaStoredProcedure
GO