【问题标题】:How to insert datetime into a SQL Server database table with a stored procedure?如何使用存储过程将日期时间插入 SQL Server 数据库表中?
【发布时间】:2014-02-15 21:49:52
【问题描述】:

我创建了以下存储过程:

create proc sp
    @Tablename nvarchar(max), @Dt datetime
as
begin
    exec('insert '+@Tablename+' values('+@Dt+')')
end

当我执行那个存储过程时

exec sp 'TbName','2012-12-10 13:38:00.000'

我收到了这个错误:

消息 102,第 15 级,状态 1,第 1 行
'10' 附近的语法不正确。

提前感谢您的帮助。

【问题讨论】:

  • 哪个“SQL 数据库”?
  • 在创建 sql 字符串以执行 exec 时将 @Dt 转换为 varchar 并将其放在 '' 之间,因此该字符串应为 insert into tbl values ('yyyymmdd')
  • 我也应该说,这可以认为是代码异味,容易被sql注入,你应该阅读动态sql的优缺点。

标签: sql sql-server-2008 stored-procedures


【解决方案1】:

您需要在日期值周围加上引号。否则它被解释为数字和其他东西:

create proc sp
    @Tablename nvarchar(max), @Dt datetime
as
begin
    exec('insert '+@Tablename+' values(''+@Dt+'')')
end;

编写此类代码时,最好将变量替换与exec() 分开。这样你就可以轻松打印出字符串:

create proc sp
    @Tablename nvarchar(max), @Dt datetime
as
begin
    declare @sql nvarchar(max);
    set @sql = 'insert '+@Tablename+' values(''+@Dt+'')';
    exec(@sql);
end;

如果您已打印出您正在执行的内容,您可能会立即发现问题。

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多