다음을 통해 공유


SQL Server의 데이터 액세스

데이터 원본 추가

직접 액세스:

앱을 만들 때 데이터로 시작 옵션을 선택하면 갤러리의 Items 속성에 데이터베이스 테이블을 직접 가리키는 데이터 원본 이름이 포함된 Power Fx 수식이 생깁니다.

예를 들어, BOOKLENDING 테이블이 있는 경우 다음 수식이 표시됩니다.

Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)

보기 및 저장 프로시저:

일반적인 전문적인 데이터 액세스 패턴은 직접 액세스를 허용하는 대신 보기를 사용한 다음 저장하여 만들고, 업데이트하고, 삭제하는 것입니다. 보기 또는 저장 프로시저를 사용하려면 예제 수식을 변경해야 합니다. 마찬가지로, 레코드의 양식도 SubmitForm() 수식의 기본 제공 직접 접근 방식을 사용하지 않습니다.

트리거:

한 가지 데이터베이스 패턴은 테이블에서 트리거를 사용하는 것입니다. 테이블에 트리거가 있는 경우 만들기, 업데이트, 삭제에 대해 직접 패턴 Submit()을 사용할 수 없습니다. Submit()은 SQL 트리거 처리와 동일한 출력 매개 변수를 사용하는 기본 제공 Power Apps 동작 간에 충돌이 있습니다.

그러나 쿼리 목적으로 테이블에 직접 액세스할 수 있지만 Create, Update 또는 Delete을 처리하려면 저장 프로시저를 호출해야 합니다.

[!참고]

관계형 데이터를 사용하는 모든 커넥터와 마찬가지로 SQL Server 커넥터는 테이블에 기본 키가 있다고 가정합니다. 기본 키는 업데이트할 특정 레코드를 찾는 데 중요합니다. SQL Server 테이블에 기본 키가 없으면 데이터가 읽기 전용으로 처리됩니다. SQL 서버 테이블에 대한 액세스 및 편집 권한이 있는 경우 자동 생성 키를 추가하는 것이 좋습니다.

보기 사용

보기는 단일 데이터 테이블로 표시되는 저장된 쿼리입니다.

보기는 데이터 원본을 추가할 때 선택할 수 있는 테이블 목록에 표시됩니다. 보기는 쿼리만 지원하고 업데이트는 지원하지 않습니다. 업데이트에는 저장 프로시저를 사용해야 합니다.

Start with data 옵션으로 테이블을 만들면 갤러리와 양식에 레코드를 표시하는 화면과 수식이 제공됩니다. 만들기, 편집 및 삭제를 위한 수식과 기능을 볼 수 있습니다. 그러나 보기를 사용하는 경우 갤러리 및 양식에 대한 표시 화면만 표시됩니다.

보기에 대해 Start with data에서 자동 생성된 화면을 원할 수 있습니다.

이 자동 생성 옵션의 경우:

  1. 기본 테이블이 있는 Start with data를 선택하세요.
  2. 테이블 데이터 원본을 삭제하고 바꿉니다.

예제:

예를 들어 BOOKLENDINGVIEW 테이블이 있고 이를 Power Apps의 데이터 원본으로 추가한 경우 수식은 다음과 같이 간단할 수 있습니다.

BOOKLENDINGVIEW

다른 만들기, 업데이트 및 삭제 수식을 보기 데이터 원본 및 저장 프로시저 호출로 바꿀 수도 있습니다.

저장 프로시저 사용

앱에 SQL Server 연결을 추가하면 저장 프로시저를 추가하고 Power Fx에서 직접 호출할 수 있습니다.

참고

이 기능은 보안 암시적 연결에서도 작동합니다.

앱에 추가할 수 있는 테이블, 보기 및 저장 프로시저 목록을 보여주는 스크린샷.

저장 프로시저를 선택하면 하위 노드가 나타나고 해당 저장 프로시저를 갤러리 및 테이블에 사용하기에 안전함으로 지정할 수 있습니다.

특정 시나리오에서 원하지 않는 동작을 수행하지 않으면 저장 프로시저는 안전합니다. 예를 들어 저장 프로시저가 지정된 도시의 모든 계정을 수집한 다음 이메일을 보낸 경우입니다. 저장 프로시저가 호출될 때마다 이메일이 항상 전송되는 것을 원하지 않을 수 있습니다. 따라서 저장 프로시저는 안전한 것으로 표시되어서는 안 됩니다.

다음과 같은 경우에만 저장 프로시저를 안전한 것으로 확인합니다.

  1. 이 프로시저를 필요에 따라 호출하는 데는 부작용이 전혀 없습니다.

    프로시저를 여러 번 호출하거나 Power Apps가 컨트롤을 새로 고칠 때마다 호출할 수 있어야 합니다. 갤러리 또는 테이블의 Items 속성과 함께 사용하면 Power Apps는 시스템에서 새로 고침이 필요하다고 판단할 때마다 저장 프로시저를 호출합니다. 저장 프로시저가 호출되는 시점을 제어할 수 없습니다.

  2. 저장 프로시저에서 적당한 양의 데이터를 반환합니다.

    저장 프로시저와 같은 작업 호출에는 검색되는 행 수에 제한이 없습니다. 테이블이나 보기와 같은 테이블 형식 데이터 원본처럼 100개의 레코드 증분 단위로 자동으로 페이징되지 않습니다.

    저장 프로시저가 너무 많은 데이터(수천 개의 레코드)를 반환하면 앱이 느려지거나 충돌할 수 있습니다. 성능상의 이유로 2,000개 미만의 레코드를 가져옵니다.

저장 프로시저가 안전하다고 확인하면 앱에서 사용할 테이블의 갤러리에서 저장 프로시저를 Items 속성으로 할당할 수 있습니다.

중요

저장 프로시저의 반환 값 스키마는 정적이어야 하므로 호출마다 값이 변경되지 않습니다. 예를 들어, 저장 프로시저가 두 개의 테이블을 반환하는 경우 항상 두 개의 테이블을 반환합니다. 형식화된 결과 또는 형식화되지 않은 결과로 작업할 수 있습니다.

결과의 구조도 정적이어야 합니다. 예를 들어, 결과의 스키마가 동적인 경우 결과에는 형식이 지정되지 않으며 Power Apps에서 결과를 사용하려면 형식을 제공해야 합니다. 자세한 내용은 형식화되지 않은 결과를 참조하세요.

SQL 네임스페이스가 저장 프로시저 이름 앞에 추가됨

프로시저를 저장하는 SQL Server 네임스페이스 이름은 저장 프로시저 이름 앞에 추가됩니다. 예를 들어, 'DBO' SQL Server 네임스페이스의 모든 저장 프로시저는 이름 시작 부분에 'dbo'가 있습니다.

예를 들어 저장 프로시저를 추가할 때 프로젝트에 둘 이상의 데이터 원본이 표시될 수 있습니다.

SQL 데이터 원본을 보여주는 스크린샷.

저장 프로시저 호출

Power Apps에서 저장 프로시저를 사용하려면 저장 프로시저 이름 앞에 연관된 커넥터 이름을 접두사로 붙이고 그 뒤에 저장 프로시저 이름을 붙입니다(예: Paruntimedb.dbonewlibrarybook).

참고

Power Apps가 저장 프로시저를 가져오면 네임스페이스와 프로시저 이름이 연결되어 dbo.newlibrarybookdbonewlibrarybook이 됩니다.

인수는 명명된 값 쌍이 있는 Power Apps 레코드로 전달됩니다.

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})

Power Apps의 텍스트 값에서 읽는 것이므로 저장 프로시저에 전달할 때 필요한 경우 값을 변환해야 합니다. 예를 들어, SQL에서 정수를 업데이트하는 경우 Value()를 사용하여 필드의 텍스트를 변환해야 합니다.

다음은 OnSelect 속성에 저장 프로시저를 할당할 때 어떤 모습일지에 대한 예입니다.

키/값 쌍 및 점 표기법을 사용하여 저장 프로시저를 직접 호출하는 방법을 보여 주는 스크린샷.

변수 및 모든 저장 프로시저

UI에 대해 안전하다고 선언한 후 갤러리의 Items 속성에 대한 저장 프로시저에 액세스할 수 있습니다. 데이터 원본 이름과 ResultSets 뒤에 저장 프로시저 이름을 참조합니다. 테이블 1, 테이블 2 등과 같이 반환된 테이블 집합을 참조하여 여러 결과에 액세스할 수 있습니다.

예를 들어, dbo.spo_show_all_library_books()라는 이름을 가진 Paruntimedb 테이블에서 액세스하는 저장 프로시저는 다음과 같습니다.

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

이 쿼리는 갤러리를 레코드로 채웁니다. 그러나 저장 프로시저는 테이블 모델에 대한 작업 동작입니다. Refresh()는 테이블 형식 데이터 원본에서만 작동하며 저장 프로시저와 함께 사용할 수 없습니다. 레코드를 만들거나, 업데이트하거나, 삭제할 때 갤러리를 새로 고쳐야 합니다.

참고

테이블 형식 데이터 원본의 양식에서 Submit()을 사용하면 실제로는 Refresh()가 호출되고 갤러리가 업데이트됩니다.

화면에 대한 OnVisible 속성의 변수를 사용하고 저장 프로시저를 변수로 설정합니다.

Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

그런 다음 갤러리의 Items 속성을 변수 이름으로 설정할 수 있습니다.

SP_Books

저장 프로시저를 호출하여 레코드를 만들거나, 업데이트하거나, 삭제한 후 변수를 다시 설정하여 갤러리를 업데이트합니다.

Paruntimedb.dbonewlibrarybook({   
  book_name: DataCardValue3_2.Text, 
  author: DataCardValue1_2.Text,
    ...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

Power Automate를 사용하여 저장 프로시저 호출

Power Automate는 비동기 작업을 가장 잘 처리합니다. 비즈니스 프로세스에서 일련의 호출의 일부로 저장 프로시저를 호출할 수 있습니다.

Power Automate를 호출한 다음 저장 프로시저를 호출하려면 흐름의 일부로 입력 변수를 만듭니다.

Power Automate 입력을 보여 주는 스크린샷.

그런 다음 입력 변수를 저장 프로시저 호출에 전달합니다.

저장 프로시저 실행

이 Power Automate 흐름을 앱에 추가하고 호출합니다. 선택적 인수는 레코드 "{ ... }”로 전달됩니다. 다음 예제에는 모든 선택적 인수가 있습니다.

Power Automate 흐름