Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server日期时间转换问题_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server日期时间转换问题

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

我需要在SQLServer2005的
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;
?这不是我需要插入的唯一字符串,我刚刚给出了一个简单场景,还有几个参数。这就是表。:-)我假设这些只是占位符名称,并不真正代表基础架构。