SQL Server日期时间转换问题
我需要在SQLServer2005的SQL Server日期时间转换问题,sql,sql-server-2005,Sql,Sql Server 2005,我需要在SQLServer2005的datetime列中插入一个datetime值 我正在从.aspx页面传递DateTime变量 需要在列中插入的 例如: Table(date datetime) @sql = 'insert into Table (date) values('+@datetime+')' exec(@sql) 获取转换失败消息 你知道怎么做吗 非常紧急 谢谢。在datetime值周围添加转义单引号。通常它们作为字符串传递 看看这是否有效: @sql = 'insert
datetime
列中插入一个datetime
值
我正在从.aspx页面传递DateTime
变量
需要在列中插入的
例如:
Table(date datetime)
@sql = 'insert into Table (date) values('+@datetime+')'
exec(@sql)
获取转换失败消息
你知道怎么做吗
非常紧急
谢谢。在datetime值周围添加转义单引号。通常它们作为字符串传递 看看这是否有效:
@sql = 'insert into Table (date) values('''+@datetime+''')'
exec(@sql)
您需要字符串分隔符-在T-SQL中,这是双引号
SET @sql = 'insert into Table (date) values('''+@datetime+''')'
exec(@sql)
但是,它仍然可能失败,具体取决于字符串的格式。您构建SQL字符串的任何原因,都倾向于SQL注入,而不仅仅是说:
INSERT Table(date) SELECT @datetime;
?确保您的查询/存储过程希望以
datetime
变量的形式接收参数(不是varchar(20)
,或其他类似的形式),并确保您的ASP.Net代码也以datetime
值的形式传递该值
基本上,为了获得最佳的日期时间处理,在接受它们作为输入时,尽可能早地将它们从字符串转换为日期时间(例如,在ASP.NET中的代码中的适当事件中转换它们),在将它们传入/传出数据库时将它们保留为日期时间,在输出它们时尽可能晚地将它们转换为字符串(例如,在asp.net mvc的查看代码中,或分配给asp.net控件的文本属性时)尝试对sql语句进行此小更改
@sql = "insert into Table (date) values ('"+ @datetime + "')"
除了分隔符和括号不匹配的其他建议外,Date是保留关键字,请改用[Date] Declare @datetime datetime Set @datetime=GetDate() Declare @sql nvarchar(1000) Declare @param nvarchar(1000) Set @param='@datetime datetime' SET @sql = 'insert into Table (date) values(@datetime)' exec sp_executesql @sql,@param,@datetime 声明@datetime datetime Set@datetime=GetDate() 声明@sql nvarchar(1000) 声明@param nvarchar(1000) Set@param='@datetime-datetime' SET@sql='插入表(日期)值(@datetime)' exec sp_executesql@sql、@param、@datetime
您必须学习动态查询的sql注入。以字符串形式插入日期几乎总是取决于您的语言/区域设置。您的字符串
@datetime
是什么样子的?如果可能,请使用ISO-8601格式:YYYYMMDD
,无论您的日期格式设置如何,该格式始终有效。您能演示一下吗您的asp.net调用SQL?如果在T-SQL端定义了@SQL,则双引号将不起作用(Msg 207)。Thnaks.我在SQL server declare@datetime datetime set@datetime='07/01/2011'declare@SQL varchar(500)set@SQL='insert-into-tbl_Quality\u VS_auditions(auditdate)值('''+convert)中创建了如下字符串(varchar,@datetime,101)+''')仍然不明白。为什么需要创建@sql字符串?为什么不运行INSERT tbl_Quality\u VS_auditions(auditdate)选择@datetime;
?这不是我需要插入的唯一字符串,我刚刚给出了一个简单场景,还有几个参数。这就是表。:-)我假设这些只是占位符名称,并不真正代表基础架构。