테이블이 2 개 있어요
Account(AccountId, Encoding)
DeviceAccountMap(AccountId, DeviceId)
이제 DeviceAccountMap
. 목록을 AccountId
저장 프로 시저에 전달 DeviceId
하고 DeviceAccountMap
테이블 에서을 가져 오는 동안 Encoding
각 계정 의 값을 특정 값과 비교해야 합니다.
이 작업을 수행하는 가장 쉬운 방법은 무엇입니까? 나는 완전히 길을 잃었다.
저장 프로 시저의 선택 절은 다음과 같습니다.
DECLARE @Accounts [usp].[Array]
다음과 [usp].[Array]
같이 정의됩니다.
CREATE TYPE [usp].[Array] AS TABLE
(
Value VARCHAR(36) NULL
)
SELECT
DeviceId,
AccountEncoding = A.Encoding
FROM
usp.DeviceControllerAccountMap DCAM
INNER JOIN
usp.Account A ON (DCAM.AccountId = A.AccountId)
WHERE
DCAM.AccountId IN (SELECT Value From @AccountIds)
AND DCAM.IsShared = 1
AND AccountEncoding LIKE A.Encoding + '.%'
즉, 각 계정에 대한 인코딩 값을 가져 와서이 where 절에서 사용해야합니다.
따라서 T-SQL에서 TVP (Table-Valued Parameters)에 대한 정보를 조회 할 수 있습니다.
이 StackOverflow 답변 을 참조하여 TVP를 사용하는 저장 프로 시저를 호출하는 C # 코드의 예를 볼 수 있습니다 . TVP에는 SQL Server 2008 이상이 필요하다고 생각합니다.
내가 이해하는 한 TVP는 SQL 서버에서 자신의 데이터 형식을 만드는 방법을 제공하여 마치 테이블처럼 취급됩니다. Array
형식 을 선언 한 다음 @AccountIds
저장 프로 시저의 select 문에서 를 사용할 때이 작업을 수행합니다.
CREATE TYPE [usp].[Array] AS TABLE -- maybe choose a more descriptive name than 'Array'
(
Value VARCHAR(36) NULL -- choose a more descriptive name than 'Value'
)
CREATE PROCEDURE [usp].[your_procedure_name]
@AccountIds [usp].[Array] READONLY -- use TVP as a parameter
AS
SELECT …
.NET Framework에 대한 저장 프로 시저에 매개 변수를 포함할지 여부는 질문 세부 정보에서 명확하지 않습니다 Encoding
. 인코딩이 마침표 '.'로 시작하는 계정을 찾고있는 것 같습니다.
그러니 먼저 당신이하는 것처럼 당신의 타입을 만드세요. 그런 다음 저장 프로 시저를 만듭니다. 그런 다음 다음과 같이 저장 프로 시저를 테스트합니다.
DECLARE @mylist Array -- make TVP sample data
INSERT @mylist(Value) VALUES(1),(11),(27),(123) -- insert some values
exec your_procedure_name @mylist -- run stored procedure
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다