Dapper : 테이블 변수에 행 삽입

c# dapper insert sql table-variable

문제

나는 최근에 dapper를 사용 해왔다. 그리고 모두는 테이블 변수를 사용할 때를 제외하고는 전혀 문제가 없었다.

데모를 위해이 스레드 의 수정 된 예제를 사용합니다.

이 코드는 문제없이 작동합니다.

int tally = connection.Execute(
    "create table #t(Name nvarchar(max), Age int)\n" +
    "insert #t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });

하지만 그렇지 않습니다.

int tally = connection.Execute(
    "create table @t(Name nvarchar(max), Age int)\n" +
    "insert @t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });

유일한 변경 사항은 임시 테이블 ( @ instead # ) @ instead # 테이블 변수를 사용하는 것입니다. Dapper (또는 체인의 다른 것)는 어떻게 든 이것을 매개 변수와 혼합하여 "테이블 변수 @t 선언해야 함"을 반환합니다.

내 사용법에 문제가 있거나 버그 / 누락 된 기능이 있습니까?

안부 인사, 케이


최신 정보:

명확히하기 위해 : @t@t 가 설정할 매개 변수가 아닙니다. @t 는 현재 실행중인 쿼리에 대해서만 존재하는 로컬 테이블로 선언됩니다. 내 의견으로는, dapper는 "정상적인"테이블인지, 로컬 / 글로벌 임시 테이블인지 또는 테이블 변수인지를 구분해서는 안됩니다.

배경 정보 조금 더 :

내가 정말로하고 싶은 것은 :

  • 인덱싱 된 테이블 변수에 ID 목록 삽입 (또는 테이블 변수가 작동하지 않는 경우 임시 테이블)
  • 이 테이블을 영구 테이블 중 하나에 조인하고 결과를 반환하십시오.

내 의도는 WHERE IN (...) 절을 사용하여 테이블에서 선택하면 성능 문제가 발생하는 것입니다.

인기 답변

SQL Server를 사용하는 경우 구문이 올바르지 않습니다. SQL Server에서 테이블 변수는 일반 테이블과 같은 방식으로 생성되지 않습니다. 그것은 다음과 같아야합니다.

DECLARE @t TABLE (
   -- table definition
);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow