2009-10-26 3 views
3

텍스트 파일에 몇 개의 SQL 문이 저장되어 있습니다. 이 파일을 여러 위치에서 동일한 쿼리를 사용할 수 있도록 SSIS의 문자열 변수로 가져 오는 방법은 무엇입니까? 질문에 대한SSIS : SQL 문을 파일에서 문자열 변수로 가져 오려면 어떻게해야합니까?


답변 :

쿼리가 길고 복잡하다, 내가하지 SSIS 텍스트 상자 안에 실제 텍스트 편집기에서 편집 원합니다 뭔가. 또한 SSIS에 액세스 할 수 없거나이를 사용하는 방법을 모르는 사람들이 쿼리를 편집 할 수 있기를 바랍니다. 마지막으로 각 쿼리는 다양한 데이터 흐름에서 사용됩니다. 내가 틀렸다면 나를 정정하십시오. 그러나 여러 곳에서 같은 쿼리를 사용하면 변수를 사용하거나 각 데이터 흐름에 코드를 다시 써야한다고 믿습니다.

+0

그런데 왜 당신은 패키지 내부를 사용하여 직접 파일 대신에서 쿼리를 끌어 하시겠습니까? 그리고 어떻게 패키지 내에서 이러한 쿼리를 사용하고 있습니까? 귀하의 요구 사항에 대해 더 자세히 설명하고 올바른 방법을 제안 할 수 있습니다. – Faiz

+0

귀하의 질문에 답변을 올리기 위해 게시물을 편집했습니다. 감사합니다, – kubi

답변

7

여기 (대답을 모든 곳에서 검색하고 아무 것도 발견하지 후.) 나는이 매우 일을 한 방법은 내가 데이터 내보내기 마법사가 만든 패키지와 함께 시작

, 나의 지시는 관련이 있습니다. 이렇게하면 열 매핑이 설정됩니다. 패키지를 만들기 위해 내보내기 마법사를 사용하지 않았다면 직접 열을 추가해야 할 수도 있습니다.

  1. SQLFileName이라는 문자열 변수를 패키지에 추가하십시오.
  2. SQLCommand라는 문자열 변수를 패키지에 추가하십시오.
  3. 제어 흐름 시작시 스크립트 태스크를 추가하십시오.
  4. 스크립트 태스크를 편집하고 스크립트 섹션으로 이동하십시오.
  5. SQLFileName을 ReadOnlyVariables 섹션에 추가하십시오. .sql 파일의 경로를 으로 설정하십시오.
  6. ReadWriteVariables 섹션에 SQLCommand를 추가하십시오.
  7. 디자인 스크립트를 클릭하십시오.
  8. 아래 스크립트에 붙여 넣으십시오.그냥 SqlFileName으로 지정된 파일의 내용을 SQLCommand로 읽습니다.
  9. 나가서 스크립트 태스크를 나머지 제어 흐름에 연결하십시오.
  10. 데이터 흐름으로 이동하여 소스 쿼리를 선택하십시오. 속성 창을 사용하여 속성을 편집해야합니다. 공상 편집 창을 사용하면 이 아닌 명령 텍스트에 대해 오류가 발생합니다. SQLCommand 은 디자인 타임에 비어 있기 때문입니다.
  11. 변수에서 AccessMode to SQL 명령을 변경하십시오.
  12. SQLVariableName에서 SQLCommand를 선택하십시오.
  13. 소스 쿼리에 빨간색 X가 추가 된 것을 볼 수 있습니다. SQLCommand가 비어 있기 때문에 입니다. 빨간색 X를 방지하려면 ValidateExternalMetaData를 False로 변경하십시오.

그게 전부입니다. 나는 모든 것들을 기억하기를 바란다. 스크립트는 SQL을 변수로 가져온 다음 데이터 흐름에서 변수를 사용할 수 있도록 핵심 부분입니다.


Imports System 
    Imports System.IO 
    Imports Microsoft.SqlServer.Dts.Runtime 

    Public Class ScriptMain 

     Public Sub Main() 

      Try 

       Dts.Variables("SQLCommand").Value = System.IO.File.ReadAllText(Dts.Variables("SQLFileName").Value.ToString) 

       Dts.TaskResult = Dts.Results.Success 

      Catch oException As System.Exception 

       Dts.TaskResult = Dts.Results.Failure 

      End Try 

     End Sub 

    End Class 
4

이 작업을 수행하지 않는 것이 좋습니다. 내 제안은 저장 프로 시저입니다.

그래도 문제는, 연결 관리자에서 파일 연결을 만듭니다. 파일 연결의 속성을 열고 식을 편집합니다. SQL 파일 경로 (예 : @[User::SQLFileName], SQLFileName은 변수)와 같은 연결 문자열 특성에 대한 표현식을 작성하십시오.

실행 SQL 태스크를 설정하고 방금 작성한 표현식이 들어있는 파일 연결을 지정하십시오. 변수의 경로를 변경하면 런타임에 표현식이 평가되므로 실행될 SQL이 변경됩니다. db에서 이러한 경로를로드하고 각각에 대해 execute SQL 작업을 포함하는 작업을 수행 할 수도 있습니다. SQL 작업뿐만 아니라 이러한 파일을 사용하여 데이터를로드/아웃하는 경우 열과 메타 데이터를 볼 필요가 있습니다.

크리스 또는

0

, (이것은 자신에게 적용되지 않을 수도 있습니다), 당신은 SSIS 패키지에 액세스하지 않고 변경 될 수있는 실제 데이터베이스에보기를 만들 수 있습니다. 다른 사용자가 언급 한 것처럼 SQL을 편집 할 수 있으며 거래에서 인텔리 센스 지원을받을 수도 있습니다.

저는 SSIS 텍스트 상자에 SQL을 쓰는 팬이 아닙니다.

+0

보기가 내 생각이었습니다. 개인적으로, 나는 적절한 승인없이 DB에 대해 자동으로 실행되는 SQL 편집 사용자의 생각과 검증을 좋아하지 않는다. 누군가가 오타가있어 행이 제거되거나 프로 시저의 절반이 완료 될 때까지 잡히지 않으면 어떻게 될까요? 우! – KSimons

관련 문제