최종 사용자가 특정 검색 기준을 입력하지 않도록 허용하는 동적 SQL 쿼리를 작성하려고합니다. 이 예제에서는 최종 사용자가 @GLAccountEnd
값을 입력하지 않고 @GLAccountStart
의 값을 입력 할 수 있고 이 올바르게 실행되는 "IF ...
"문이 있어야합니다.동적 SQL은 null 변수를 SSRS에 전달하지 못하도록합니다.
그러나 SSRS에서 실행하려고하면 첫 번째 값만 입력하면 0 행 (2가 반환 됨)이 반환되고 두 변수의 값을 입력하면 실제로 올바른 행 수가 반환됩니다. 또한 @GLAccountEnd
변수를 내 스크립트에서 완전히 제거하고 @GLAccountStart
을 포함하는 옵션을 사용하여 실행하면 SSRS는 올바른 수의 올바른 입력 행을 반환합니다.
이것을 구현하는 데 유용한 것이 있습니까?
USE [DataWarehouse]
GO
/****** Object: StoredProcedure [dbo].[BrowseCODA] Script Date: 6/27/2016 8:37:37 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BrowseCODA]
@GLAccountStart int,
@GLAccountEnd int
AS
SET NOCOUNT ON;
DECLARE @SQLQuery AS nvarchar(4000)
DECLARE @ParameterDef AS nvarchar(2000)
SET @SQLQuery = 'SELECT *
FROM [DataWarehouse].[dbo].[VDocDetails]
WHERE Company+''-''+FullDocNumber IN
(SELECT Company+''-''+FullDocNumber
FROM [DataWarehouse].[dbo].[VDocDetails]
WHERE (1=1)'
IF (@GLAccountStart IS NOT NULL) AND (@GLAccountEnd IS NOT NULL)
SET @SQLQuery = @SQLQuery + ' AND (GLAccount >= @GLAccountStart) AND (GLAccount <= @GLAccountEnd)'
IF (@GLAccountStart IS NOT NULL) AND (@GLAccountEnd IS NULL)
SET @SQLQuery = @SQLQuery + ' AND (GLAccount = @GLAccountStart)'
SET @SQLQuery = @SQLQuery + ')'
SET @ParameterDef =
'@GLAccountStart int,
@GLAccountEnd int'
EXECUTE sp_Executesql @SQLQuery,
@ParameterDef,
@GLAccountStart,
@GLAccountEnd
IF @@ERROR <> 0 GOTO ErrorHandler
SET NOCOUNT OFF
RETURN(0)
ErrorHandler:
Return(@@ERROR)
GO
@ SSRS에 매개 변수 정의를 게시하십시오. 'GLAccountEnd' 정수 또는 텍스트입니까? – vercelli
현재 공백 값을 전달할 수 있도록 텍스트입니다. –