C# 执行期间发生SQL代码显式转换错误
我在尝试执行代码时遇到错误“不允许从数据类型int显式转换为date”。SQL是C# 执行期间发生SQL代码显式转换错误,c#,sql,sql-server,C#,Sql,Sql Server,我在尝试执行代码时遇到错误“不允许从数据类型int显式转换为date”。SQL是 USE [xxDB] GO declare @currentMonth int = 1, @currentYear int = 2014, @newExpireMonth int =6, @newExpireYear int =2018, @actualDate varchar(30), @fromDate varchar(30), @toDate varchar(30) declare @Sql varch
USE [xxDB]
GO
declare @currentMonth int = 1,
@currentYear int = 2014,
@newExpireMonth int =6,
@newExpireYear int =2018,
@actualDate varchar(30),
@fromDate varchar(30),
@toDate varchar(30)
declare @Sql varchar(8000)
begin
create table #MytempTab1
(
actualNewDate varchar(30),
newUserId int
)
insert into #MytempTab1
select
(RIGHT( '00' + CAST(ISNULL(ss.ExpiryMonth, '01') as varchar(2)),
2)+'-01'+'-'+RIGHT('0000' + CAST(ISNULL(ss.ExpiryYear, '2014') as
varchar(4)), 4)) as actualNewDate, ss.UserId as newUserId
from
dbo.UserProfile u
inner join dbo.webpages_UsersInRoles wur on u.UserId=wur.UserId
inner join dbo.SpreedlySubscriber ss on u.UserId=ss.UserId
where
(wur.RoleId=4)
end
set @Sql= '
select
ss.FirstName as FirstName, ss.LastName as LastName,
ss.ExpiryMonth as ExpMonth, ss.ExpiryYear as ExpYear
from dbo.UserProfile u
inner join dbo.webpages_UsersInRoles wur on u.UserId=wur.UserId
inner join dbo.SpreedlySubscriber ss on u.UserId=ss.UserId
inner join #MytempTab1 mt on ss.UserId= mt.newUserId
inner join dbo.[Order] odr on ss.OrderId=odr.OrderId
where (wur.RoleId=4) and '
set @fromDate = RIGHT('00' + CAST(@currentMonth as varchar(2)), 2) +'-01'+'-'+ RIGHT('0000' + CAST(@currentYear as varchar(4)), 4)
set @toDate= RIGHT('00' + CAST(@newExpireMonth as varchar(2)), 2) +'-01'+'-'+ RIGHT('0000' + CAST(@newExpireYear as varchar(4)), 4)
set @Sql= @Sql+ '(CONVERT(date, mt.actualNewDate, 110) BETWEEN CONVERT(date, '+@fromDate+', 110) AND CONVERT(date, '+@toDate+', 110))'
print (@Sql)
EXEC(@Sql)
drop table #MytempTab1
我相信这是比较日期的最后一行。临时表只包含字符串和最后一行,将其转换为日期并进行比较
提前谢谢 选择列表中有一个逗号尾随:
set @Sql= '
select
ss.FirstName as FirstName, ss.LastName as LastName,
ss.ExpiryMonth as ExpMonth, ss.ExpiryYear as ExpYear,
-- ^
在设置
@sql
时,查询中的from关键字前面有额外的,
选择语句remove”,“我建议不要像在存储过程中那样执行动态sql。相反,使用带有显式参数的sp_executesql—这样您就知道您不会受到SQL注入的影响<代码>(转换(日期,mt.actualNewDate,110)在转换(日期,++@fromDate++',110)和转换(日期,++@toDate++',110)之间)是一种非常低效的确认日期是否在两个日期之间的方法。将mt.actualNewDate
的列类型更改为Date
类型,并将@fromDate和@toDate更改为Date
。然后在@fromDate和@toDate之间使用mt.actualNewDate
(使用sp_executesql
参数)。您好,删除逗号后,新的错误告诉您“不允许从数据类型int显式转换为日期”。因此,上面对您的问题的注释;并且,考虑问一个新问题。