I'm getting below error while executing a stored procedure in SSIS. Want to know what will be possible reasons for below error. I have dynamic query in stored procedure:
SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The metadata could not be determined because statement 'EXECUTE sp_executesql @SQLString' in procedure 'ABC_test' contains dynamic SQL. Consider using the WITH RESULT SETS clause to explicitly describe the result set.
Below is my stored procedure. It is executing in SSIS but while scheduling this package in SQL Server Agent Job its throwing the above error
Create PROCEDURE [dbo].[ABC_test]
@ProgramVersionName NVARCHAR(255) = NULL,
@FiscalYear INT = 0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQLString NVARCHAR(MAX)
DECLARE @SQLWhereString NVARCHAR(MAX)
SET @ProgramVersionName = LTRIM(@ProgramVersionName)
SET @ProgramVersionName = RTRIM(@ProgramVersionName)
SET @FiscalYear = LTRIM(@FiscalYear)
SET @FiscalYear = RTRIM(@FiscalYear)
/********** Parameter conditions check ***********************/
IF (@ProgramVersionName IS NOT NULL AND @ProgramVersionName <> '') AND (@FiscalYear IS NULL OR @FiscalYear = 0)
BEGIN
SET @SQLWhereString = ' WHERE PV.[Name] = ''' + @ProgramVersionName + ''''
END
ELSE IF (@ProgramVersionName IS NULL OR @ProgramVersionName = '') AND (@FiscalYear IS NOT NULL AND @FiscalYear <> 0)
BEGIN
SET @SQLWhereString = ' WHERE DATEPART(YYYY, D.Date) = ' + CONVERT(NVARCHAR(10), @FiscalYear)
END
ELSE IF (@ProgramVersionName IS NOT NULL AND @ProgramVersionName <> '') AND (@FiscalYear IS NOT NULL AND @FiscalYear <> 0)
BEGIN
SET @SQLWhereString = ' WHERE PV.[Name] = ''' + @ProgramVersionName + ''' AND DATEPART(YYYY, D.Date) = ' + CONVERT(NVARCHAR(10), @FiscalYear)
END
/********** End ***********************/
SET @SQLString = ' SELECT CASE WHEN PV.IsBaseline = 1 AND PV.IsForecast = 0 THEN ''BUDGET''
WHEN PV.IsBaseline = 0 AND PV.IsForecast = 1 THEN ''FORECAST''
END AS BALANCE_TYPE
,CONVERT(VARCHAR(50), PV.[Name]) AS BUDGET_ID
,CONVERT(VARCHAR(255), PV.Description) AS BUDGET_DESCRIPTION
,DATEPART(YYYY, PV.Date) AS FISCAL_YEAR
FROM
[dbo].[CPP] PV
'
SET @SQLString = @SQLString + ISNULL(@SQLWhereString, '')
SET @SQLString = @SQLString + ' UNION ALL
SELECT CASE WHEN PV.IsBaseline = 1 AND PV.IsForecast = 0 THEN ''BUDGET''
WHEN PV.IsBaseline = 0 AND PV.IsForecast = 1 THEN ''FORECAST''
END AS BALANCE_TYPE
,CONVERT(VARCHAR(50), PV.[Name]) AS BUDGET_ID
,CONVERT(VARCHAR(255), PV.Description) AS BUDGET_DESCRIPTION
,DATEPART(YYYY, PV.Date) AS FISCAL_YEAR
FROM
[dbo].[CPP] PV'
SET @SQLString = @SQLString + ISNULL(@SQLWhereString, '')
SET @SQLString = ' SELECT A.BALANCE_TYPE
,A.BUDGET_ID
,A.BUDGET_DESCRIPTION
,A.FISCAL_YEAR
FROM
(
' + @SQLString +
' ) A
'
--print @SQLString
EXECUTE sp_executesql @SQLString
END
Above SP is executing in SSIS but while scheduling this package in SQL Server Agent Job its giving above error. It is giving error for dynamic SQL in SP. Kindly let me know what are the possible solution to achieve the above solution to work in SQL Server Agent Jobs
