我试图运行该SP在SSRS,但它给我下面的错误 -动态SQL SSRS给人以错误的参数转换为datetime
未能参数值从字符串转换为日期时间。
我不明白我在这里做错了什么。它是一个动态SQL。我知道错误发生在转换日期参数的日期转换中。这四个参数是 - @ dtAdjustedStart,@ dtAdjustedEnd,@ dtAdjustedStartLY,@ dtAdjustedEndLY。任何人都可以请帮助我 -
ALTER PROC SSRS_Specials_Performance_Report(@DB varchar(30),@cOperators varchar(50),@dtAdjustedStart DATETIME,@dtAdjustedEnd DATETIME, @dtAdjustedStartLY DATETIME,@dtAdjustedEndLY DATETIME,@cSalespoints
varchar(30),@vcRankingColumn varchar(30), @vcRankingDirection varchar(30))
AS
DECLARE @SQL VARCHAR(MAX)
IF OBJECT_ID('tempdb..#transact_ty') IS NOT NULL DROP TABLE #transact_ty;
CREATE TABLE #transact_ty
(
special CHAR(10),
quantity INT,
admissions INT,
pr_ctr_1 INT,
pcsplit_1 MONEY,
pr_ctr_2 INT,
pcsplit_2 MONEY,
pr_ctr_3 INT,
pcsplit_3 MONEY,
pr_ctr_4 INT,
pcsplit_4 MONEY,
pr_ctr_5 INT,
pcsplit_5 MONEY,
pr_ctr_6 INT,
pcsplit_6 MONEY
);
IF OBJECT_ID('tempdb..#transact_ly') IS NOT NULL DROP TABLE #transact_ly;
CREATE TABLE #transact_ly
(
special CHAR(10),
quantity INT,
admissions INT,
pr_ctr_1 INT,
pcsplit_1 MONEY,
pr_ctr_2 INT,
pcsplit_2 MONEY,
pr_ctr_3 INT,
pcsplit_3 MONEY,
pr_ctr_4 INT,
pcsplit_4 MONEY,
pr_ctr_5 INT,
pcsplit_5 MONEY,
pr_ctr_6 INT,
pcsplit_6 MONEY
)
IF OBJECT_ID('tempdb..#ReportOutput') IS NOT NULL DROP TABLE #ReportOutput;
CREATE TABLE #ReportOutput
(
Special CHAR(10),
SpecialDescription VARCHAR(25),
SpecialAdmitsTY INT,
SpecialRevenueTY MONEY,
SpecialPctOfTotal NUMERIC(12,4),
SpecialRevenueLY MONEY,
ProfitCenter VARCHAR(25),
RevenueCenter VARCHAR(25),
AdmissionsTY INT,
RevenueTY MONEY,
TotalRevenueTY MONEY,
AdmissionsLY INT,
RevenueLY MONEY,
TotalRevenueLY MONEY,
AdmissionsVariance INT,
RevenueVariance MONEY
);
SET @SQL = 'INSERT INTO #transact_ty
SELECT t.special,
t.quantity,
t.admissions,
t.pr_ctr_1,
t.pcsplit_1,
t.pr_ctr_2,
t.pcsplit_2,
t.pr_ctr_3,
t.pcsplit_3,
t.pr_ctr_4,
t.pcsplit_4,
t.pr_ctr_5,
t.pcsplit_5,
t.pr_ctr_6,
t.pcsplit_6
FROM ' + @DB + '.dbo.transact t
WHERE t.date_time BETWEEN CAST(''' + CONVERT(varchar,@dtAdjustedStart,120) + ''' AS DATE) AND CAST('''+ CONVERT(varchar,@dtAdjustedEnd,120) + ''' AS DATE)
AND t.operator IN ('''+ @cOperators + ''')
AND t.salespoint IN (''' + @cSalespoints + ''')'
EXEC(@SQL)
SET @SQL = 'INSERT INTO #transact_ly
SELECT t.special,
t.quantity,
t.admissions,
t.pr_ctr_1,
t.pcsplit_1,
t.pr_ctr_2,
t.pcsplit_2,
t.pr_ctr_3,
t.pcsplit_3,
t.pr_ctr_4,
t.pcsplit_4,
t.pr_ctr_5,
t.pcsplit_5,
t.pr_ctr_6,
t.pcsplit_6
FROM ' + @DB + '.dbo.transact t
WHERE t.date_time BETWEEN CAST('''+ CONVERT(varchar,@dtAdjustedStartLY,120) + ''' AS DATE) AND CAST(''' + CONVERT(varchar,@dtAdjustedEndLY,120)+ ''' AS DATE)
AND t.operator IN (''' + @cOperators + ''')
AND t.salespoint IN (''' + @cSalespoints + ''')'
EXEC(@SQL)
如果你PRINT @SQL执行之前,这是否给你任何线索?你可以发布给出错误的PRINT的结果吗? – 2014-09-25 14:54:20
其实根据你的错误信息,我怀疑你在调用proc的代码中出错,而不是在proc本身。你想传递给proc的值是什么? – 2014-09-25 14:59:24