我正在尝试执行并且成功执行,没有任何错误,但是该值未插入dbo.Quarter_SourceData中。因此,我想知道是否可以与多个存储的proc合并?
我已经对与多个存储的proc合并进行了一些研究,但是合并的代码似乎我不太了解。
USE [CBC_Quarter_Report]
GO
/****** Object: StoredProcedure [dbo].[spDownloadQuarterSourceData] Script Date: 12/24/2014 09:06:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spDownloadQuarterSourceData]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sSQL nVarchar(Max)
DECLARE @sExe nVarchar(Max)
DECLARE @QStartDate nvarchar(8)
DECLARE @QEndDate nvarchar(8)
SET @QStartDate = CONVERT(VARCHAR,(DATEADD(q, DATEDIFF(q, 0, getdate() - 8), 0)),112)
SET @QEndDate = CONVERT(VARCHAR,(DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, getdate() - 8) + 1, 0))), 112)
--------------------------------------------------------------------------------
-- Insert Client Info
--------------------------------------------------------------------------------
SET @sSQL = 'SELECT DISTINCT AGNT.AGNTBR, AGNT.AGNTNUM, (CLNT.SURNAME + CLNT.GIVNAME) AS AGENT_NAME,
IPI.Policy_No, IPI.Name AS Insured_Name,
CONVERT(VARCHAR(10), CAST(IPI.Issue_Date AS DATE), 103) AS Date_CN_Issues,
IPI.Inception_Date AS Contract_Commencement_Date, IPI.Expiry_Date,
CASE WHEN PI.Transaction_Date IS NULL THEN '''' ELSE CONVERT(VARCHAR(10), CAST(PI.Transaction_Date AS DATE), 103) END AS Date_Received,
DATEDIFF(DAY, IPI.Issue_Date, PI.Transaction_Date) AS Days_Compliant, DT_INSERT= getdate(),
STATUS = NULL, ACTUAL_DAY = 0
FROM dbo.Quarter_Insured_Policy AS IPI
LEFT JOIN dbo.AGNTPF AGNT ON IPI.Agent_No = AGNT.AGNTNUM
LEFT JOIN dbo.CLNTPF CLNT ON AGNT.CLNTNUM = CLNT.CLNTNUM
LEFT JOIN dbo.Quarter_Payment AS PI ON IPI.Policy_No = PI.Policy_No
WHERE (PI.Transaction_Date >= ' + @QStartDate + ' AND PI.Transaction_Date <= ' + @QEndDate + ')
AND substring(AGNT.AGNTNUM, 3,1) = ''V''
ORDER BY AGNT.AGNTBR, AGNT.AGNTNUM'
TRUNCATE TABLE dbo.Quarter_SourceData
set @sExe = 'Insert into dbo.Quarter_SourceData ' + @sSQL
exec (@sExe)
--print @sExe
END
这是您的主要问题。修改SET以在日期周围加上双引号,因为它们是字符串,就像对子字符串比较所做的一样。
SET @sSQL = 'SELECT DISTINCT AGNT.AGNTBR, AGNT.AGNTNUM, (CLNT.SURNAME + CLNT.GIVNAME) AS AGENT_NAME,
IPI.Policy_No, IPI.Name AS Insured_Name,
CONVERT(VARCHAR(10), CAST(IPI.Issue_Date AS DATE), 103) AS Date_CN_Issues,
IPI.Inception_Date AS Contract_Commencement_Date, IPI.Expiry_Date,
CASE WHEN PI.Transaction_Date IS NULL THEN '''' ELSE CONVERT(VARCHAR(10), CAST(PI.Transaction_Date AS DATE), 103) END AS Date_Received,
DATEDIFF(DAY, IPI.Issue_Date, PI.Transaction_Date) AS Days_Compliant, DT_INSERT= getdate(),
STATUS = NULL, ACTUAL_DAY = 0
FROM dbo.Quarter_Insured_Policy AS IPI
LEFT JOIN dbo.AGNTPF AGNT ON IPI.Agent_No = AGNT.AGNTNUM
LEFT JOIN dbo.CLNTPF CLNT ON AGNT.CLNTNUM = CLNT.CLNTNUM
LEFT JOIN dbo.Quarter_Payment AS PI ON IPI.Policy_No = PI.Policy_No
WHERE (PI.Transaction_Date >= ''' + @QStartDate + ''' AND PI.Transaction_Date <= ''' + @QEndDate + ''')
AND substring(AGNT.AGNTNUM, 3,1) = ''V''
ORDER BY AGNT.AGNTBR, AGNT.AGNTNUM'
另外,最好使用EXEC sp_executesql (@sExe)
代替EXEC (@sExe)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句