2017-12-08 2 views
0

@relation이라는 변수에 (쿼리에서 파생 된) 테이블을 할당하려고하는 저장 프로 시저가 있습니다. 현재 쓸데없는 시도가 있습니다.로컬 테이블을 채우는 방법?

ALTER PROCEDURE [dbo].[getAllBookings] 
@mode INT 
AS 
BEGIN 
SET NOCOUNT ON; 
--========== 
DECLARE @relation AS TABLE(
     id INT PRIMARY KEY, code VARCHAR(10), [description] VARCHAR(255), 
     environment VARCHAR(10), systems VARCHAR(50), [start] SMALLDATETIME, 
     [end] SMALLDATETIME, [user] VARCHAR(50), approved BIT, rejected BIT 
    ); 
SELECT * INTO [@relation] FROM 
SELECT 
B_ID AS 'id', 
B_Change_ID AS 'code', 
B_Description AS 'description', 
E_Name AS 'environment', 
S_System_Name AS 'systems', 
dbo.fromDateTime(B_Start_Date) AS 'start', 
dbo.fromDateTime(B_End_Date) AS 'end', 
U_Name AS 'user', 
dbo.isAppr(B_Reviewed, B_Confirmed) AS 'approved', 
dbo.isRej(B_Reviewed, B_Confirmed) AS 'rejected' 
FROM ((((dbo.Bookings INNER JOIN dbo.Users ON B_User_ID = U_ID) 
INNER JOIN dbo.Environment ON B_Environment_ID = E_ID) 
INNER JOIN dbo.BookingApps ON B_ID = BA_bookingID) 
INNER JOIN dbo.EnvironmentSystems ON BA_bookingSystemID = ES_ID) 
INNER JOIN dbo.System_List ON ES_SystemID = S_ID; 

--========== 
IF (@mode = 0) 
    DELETE FROM @relation WHERE (approved = 0); 
SELECT * FROM @relation; 
END 

내가 뭘 잘못하고 있니?

+0

P. [@relation]이 @relation 인 경우를 이미 시도했습니다. 그리고 아직도 운이 없다. 나는 또한 행운을 빌어 요()에서 쿼리를 캡슐화하려고 시도했습니다. –

+0

코드를 실행하면 어떻게됩니까? 오류가 있습니까? 뭐야? – Jon

답변

1

데이터 작성 및 실행을 시도하지는 않았지만 컴파일하려면 다음과 같이 수정해야했습니다. 아마도 이것은 당신이 시작하도록 도와 줄 것입니다.

CREATE PROCEDURE [dbo].[getAllBookings] @mode INT 
AS 
    BEGIN 
     SET NOCOUNT ON; 

     --========== 
     DECLARE @relation AS TABLE 
      (
       [id]   INT PRIMARY KEY 
       , [code]  VARCHAR(10) 
       , [description] VARCHAR(255) 
       , [environment] VARCHAR(10) 
       , [systems]  VARCHAR(50) 
       , [start]  SMALLDATETIME 
       , [end]   SMALLDATETIME 
       , [user]  VARCHAR(50) 
       , [approved] BIT 
       , [rejected] BIT 
     ); 

     INSERT INTO @relation 
        ([id] 
        , [code] 
        , [description] 
        , [environment] 
        , [systems] 
        , [start] 
        , [end] 
        , [user] 
        , [approved] 
        , [rejected]) 
      SELECT [B_ID]         AS 'id' 
        , [B_Change_ID]       AS 'code' 
        , [B_Description]       AS 'description' 
        , [E_Name]        AS 'environment' 
        , [S_System_Name]       AS 'systems' 
        , dbo.fromDateTime([B_Start_Date])  AS 'start' 
        , dbo.fromDateTime([B_End_Date])   AS 'end' 
        , [U_Name]        AS 'user' 
        , dbo.isAppr([B_Reviewed], [B_Confirmed]) AS 'approved' 
        , dbo.isRej([B_Reviewed], [B_Confirmed]) AS 'rejected' 
      FROM dbo.[Bookings] 
        INNER JOIN dbo.[Users] 
          ON [B_User_ID] = [U_ID] 
        INNER JOIN dbo.[Environment] 
          ON [B_Environment_ID] = [E_ID] 
        INNER JOIN dbo.[BookingApps] 
          ON [B_ID] = [BA_bookingID] 
        INNER JOIN dbo.[EnvironmentSystems] 
          ON [BA_bookingSystemID] = [ES_ID] 
        INNER JOIN dbo.[System_List] 
          ON [ES_SystemID] = [S_ID]; 

     --========== 
     IF (@mode = 0) 
      DELETE FROM @relation 
      WHERE ([approved] = 0); 

     SELECT * 
     FROM @relation; 
    END 
+0

감사합니다. –

+0

반갑습니다. 그것이 내게 도움이된다면 내 대답에 투표하십시오. 참고로 dpriver.com의 SQL 코드 포맷 도구를 사용하여 코드의 문제를 명확히 설명합니다. 사용할 수있는 유사한 도구가 많이 있지만 그 중 하나를 사용하면 매우 유용합니다. 케이 –

관련 문제