从字符串转换日期/时间时转换失败
conversion failed when converting date /time from character string
SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].CDM_Audit_EAP_OT]
WHERE
@ColDate BETWEEN @Start_Date AND @End_Date
添加新参数后@ColDate
,我开始出现上述错误。
@ColDate
有 "CONTACT_DATE_new" 或 "DateUpdated"。用户将根据自己的需求选择其中之一。
如果我直接指定列,报告将正常工作。
WHERE CONTACT_DATE_new BETWEEN @Start_Date AND @End_Date
WHERE DateUpdated BETWEEN @Start_Date AND @End_Date
请在 where 子句中使用以下语句。我没有测试以下脚本。
SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].[CDM_Audit_EAP_OT]
where
(@locationType = 'DateUpdated' AND (DateUpdated BETWEEN @Start_Date AND @End_Date)
案例
SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].[CDM_Audit_EAP_OT]
where
CASE
when @locationType = 'DateUpdated' and (DateUpdated BETWEEN @Start_Date AND @End_Date) then 1
Else 0
End = 1
您查询中的@ColDate
不被视为列名,而是被视为字符串类型变量。当您尝试将其值与 @startdate
和 @enddate
进行比较时,它会失败。因此错误。您可以按如下方式创建存储过程以满足您的需要:-
Create PROCEDURE [SSRSReport]
@Start_Date date,
@End_Date date,
@ColDate nvarchar(25)
AS
BEGIN
SET NOCOUNT ON
declare @sql1 nvarchar(max)
if @ColDate = 'CONTACT_DATE_new'
begin
set @sql1 =
'SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].CDM_Audit_EAP_OT]
WHERE
CONTACT_DATE_new BETWEEN ''' + cast(Convert(nvarchar(10),@Start_Date ,120) as Nvarchar(max)) +'''
AND ''' + cast(Convert(nvarchar(10),@End_Date ,120) as Nvarchar(max)) + ''''
end
else if @ColDate = 'DateUpdated'
begin
set @sql1 =
'SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].CDM_Audit_EAP_OT]
WHERE
DateUpdated BETWEEN ''' + cast(Convert(nvarchar(10),@Start_Date ,120) as Nvarchar(max)) +'''
AND ''' + cast(Convert(nvarchar(10),@End_Date ,120) as Nvarchar(max)) + ''''
end
print @sql1
exec sp_executesql @sql1
end
SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].CDM_Audit_EAP_OT]
WHERE
@ColDate BETWEEN @Start_Date AND @End_Date
添加新参数后@ColDate
,我开始出现上述错误。
@ColDate
有 "CONTACT_DATE_new" 或 "DateUpdated"。用户将根据自己的需求选择其中之一。
如果我直接指定列,报告将正常工作。
WHERE CONTACT_DATE_new BETWEEN @Start_Date AND @End_Date
WHERE DateUpdated BETWEEN @Start_Date AND @End_Date
请在 where 子句中使用以下语句。我没有测试以下脚本。
SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].[CDM_Audit_EAP_OT]
where
(@locationType = 'DateUpdated' AND (DateUpdated BETWEEN @Start_Date AND @End_Date)
案例
SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].[CDM_Audit_EAP_OT]
where
CASE
when @locationType = 'DateUpdated' and (DateUpdated BETWEEN @Start_Date AND @End_Date) then 1
Else 0
End = 1
您查询中的@ColDate
不被视为列名,而是被视为字符串类型变量。当您尝试将其值与 @startdate
和 @enddate
进行比较时,它会失败。因此错误。您可以按如下方式创建存储过程以满足您的需要:-
Create PROCEDURE [SSRSReport]
@Start_Date date,
@End_Date date,
@ColDate nvarchar(25)
AS
BEGIN
SET NOCOUNT ON
declare @sql1 nvarchar(max)
if @ColDate = 'CONTACT_DATE_new'
begin
set @sql1 =
'SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].CDM_Audit_EAP_OT]
WHERE
CONTACT_DATE_new BETWEEN ''' + cast(Convert(nvarchar(10),@Start_Date ,120) as Nvarchar(max)) +'''
AND ''' + cast(Convert(nvarchar(10),@End_Date ,120) as Nvarchar(max)) + ''''
end
else if @ColDate = 'DateUpdated'
begin
set @sql1 =
'SELECT [PROC_ID]
,[CONTACT_DATE_new]
,[CPT_CODE_new]
,[CHARGEABLE_YN_new]
,cat.CDM_Category
,DateUpdated
FROM
[dbo].CDM_Audit_EAP_OT]
WHERE
DateUpdated BETWEEN ''' + cast(Convert(nvarchar(10),@Start_Date ,120) as Nvarchar(max)) +'''
AND ''' + cast(Convert(nvarchar(10),@End_Date ,120) as Nvarchar(max)) + ''''
end
print @sql1
exec sp_executesql @sql1
end