저에게 작성된 저장 프로 시저가 있습니다. 절에 CASE
성명을 번역 할 수 있도록 도와 주시겠습니까?WHERE 절에서 중첩 된 CASE 문을 변환하는 방법
"So if the parameter @CompanyGuids is NOT NULL, then we are checking if table @CompanyGuidsTbl has assigned parameter and if it does - then we gonna use it, but if it does not - ??? "
아마 다시 작성하는 방법이 : 내가 틀렸다면
--Declaring the parameter for SP
DECLARE
@CompanyGuids varchar(8000) = '29634AF7-D0A2-473D-9574-405C23E10F02'
--Declaring table variable that will contain only CompanyGuid
DECLARE @CompanyGuidsTbl TABLE(Guid uniqueidentifier)
IF @CompanyGuids IS NULL
BEGIN
INSERT INTO @CompanyGuidsTbl
SELECT DISTINCT CompanyGuid FROM tblCompanies
END
ELSE
BEGIN
INSERT INTO @CompanyGuidsTbl
SELECT * FROM dbo.StringOfGuidsToTable(@CompanyGuids,',')
END
--Select statement
SELECT Col1,
Col2,
Col3
FROM MyTable1 INNER JOIN MyTable2
/* this is where I am confused */
WHERE
CASE WHEN @CompanyGuids IS NOT NULL
THEN
CASE WHEN tblCompanies.CompanyGuid in (SELECT Guid FROM @CompanyGuidsTbl)
THEN 1 ELSE 0 END
ELSE 1
END = 1
저를 수정? 감사합니다
... 누군가가 역동적 인 SQL을 피할 가능성이 있지만, 역효과를 낼 수있는 특정 단계를 거치지 않는 한 (그리고 어쨌든 성능이 손상 될 수 있음). 좀 더 이상한 점은 임시 테이블에 _all_id를 덤핑하고 있다는 것입니다. 즉, 어쨌든 방금 'JOIN'을 수행 할 수 있다는 의미입니다. 수표가없는 성명서를 사용하는 것이 좋을 것입니다. 'StringOfGuidsToTable'가 별개의 결과를 반환하지 않는 한,'JOIN'은 동일한 결과를 반환하는 것이 보장되지 않습니다. –
당신이 작성한 WHERE 조건은 tblCompanies가 쿼리의 일부가 아니며 구문 상 올바르지 않기 때문에 오류를 던져야합니다. 그러나 쿼리가 더 이상 존재하지 않는다면 저에게 의미가 없습니다. 't shown ... – ZLK
쓴 사람이 "@ CompanyGuids"가 NULL이면 모든 것을 선택하고, 그렇지 않으면'@ CompanyGuidsTbl'의 GUID가 tblCompanies에 있는지 확인하지만 필요합니다. tblCompanies 또는'@ CompanyGuidsTbl'가 최종 쿼리에 포함됩니다. 아니면'@ CompanyGuids' 문자열에있는 모든 GUID가 tblCompanies에 있는지 확인하고 이것이 사실이라면 결과 만 표시하려고합니까? 아니면 적어도 하나는? 실제 검색어를 보지 않고 어떤 것이 있는지 알려주지 않습니다. – ZLK