2016-07-09 3 views
0

SQL을 배우기 시작하고 쿼리에 문제가 있습니다. 내가 가진 - 2 테이블 달력 및 활동과 FK 테이블 DateActivities. 날짜와 활동이있는 2 개의 간단한 목록 달력이 있습니다. 버튼을 클릭하여 선택한 날짜의 텍스트 상자를 통해 새 활동을 입력 할 수 있기를 원합니다. 하지만 그렇게하면 쿼리에 오류가 발생합니다. 당신의 도움을 주셔서 감사합니다.SQL 쿼리 실행 순서 오류

private void btnAddToDate_Click(object sender, EventArgs e) 
    { 
     string query = "DECLARE @ActivitiesId TABLE (Id INT) " + 
         "INSERT INTO Activities (Name) " + 
         "OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " + 
         "VALUES (@ActivitiesName) " + 
         "INSERT INTO DateActivities VALUES (@CalendarId, @ActivitiesId)"; 

     using (connection = new SqlConnection(connectionString)) 
     using (SqlCommand command = new SqlCommand(query, connection)) 
     { 
      connection.Open(); 
      command.Parameters.AddWithValue("@ActivitiesName", textDate.Text); 
      command.Parameters.AddWithValue("@CalendarId", listCalendar.SelectedValue); 
      command.ExecuteNonQuery(); 
     } 

     FillCalendar(); 
     FillActivities(); 
    } 
+2

넣어 시도 코드에서 블록을 채운 다음 여기에 예외를 붙여 넣으십시오. 우리는 당신의 마음을 읽을 수 없습니다. –

답변

1

여러 문을 실행하므로 아래에 다른 사람이 실행하는 하나의 문으로 처리처럼 줄 끝으로 ;로 구분해야합니다 위해 노력하고 있습니다. SSMS에서 명령문 블록을 복사/붙여 넣기하면 동일한 오류가 발생합니다.

"DECLARE @ActivitiesId TABLE (Id INT); " + 
         "INSERT INTO Activities (Name) " + 
         "OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " + 
         "VALUES (@ActivitiesName); " + 
         "INSERT INTO DateActivities VALUES (@CalendarId, @ActivitiesId)" 

임시 쿼리로 실행하는 대신 저장 프로 시저로 전달하는 것이 좋습니다. 당신은 분명히 잘못과 실패 DateActivities의 열 값에 전체 테이블을 삽입하는

0

, 당신은 ActivityId를 누른 후 다음을 삽입하는 또 다른 변수를 사용할 필요, 아래 참조 :

"DECLARE @ActivitiesId TABLE (Id INT) 
DECLARE @ActivityId INT " + 
         "INSERT INTO Activities (Name) " + 
         "OUTPUT INSERTED.ID INTO @ActivitiesId Id(Id) " + 
         "VALUES (@ActivitiesName) " + 
         "SELECT @ActivityId = Id from @ActivitiesId" 
         "INSERT INTO DateActivities VALUES (@CalendarId, @ActivityId)";