我在SQL Server 2014中以以下方式创建了此存储过程

create procedure ProcAddDate
    @tableName varchar(10),
    @inpDate date
as
    declare @sqlInsString varchar(max)

    set @sqlInsString = 'insert into '+ @tableName + ' values('
    set @sqlInsString = @sqlInsString + @inpDate + ')'

    execute(@sqlInsString)
go


但是,当我尝试执行此语句时,SQL Server抛出错误


消息402,层16,状态1,过程ProcAddDate,第7行
数据类型varchar(max)和date在add运算符中不兼容。


如何创建一个存储过程,该过程可以通过输入类型为'date'的值向表中添加日期?

最佳答案

如果必须执行此操作(如果在参数化表名称时通常表示数据模型已损坏),请使用sp_executesql,以便您可以正确地将数据传递给正确的类型(而不是强制将其传递给然后返回一个字符串):

create procedure ProcAddDate
@tableName sysname,
@inpDate date
as
    declare @sqlInsString nvarchar(max);
    set @sqlInsString = N'insert into '+ @tableName + ' values(@inpDate)';
    declare @parms nvarchar(max);
    set @parms = N'@inpDate date';
    execute sp_executesql @sqlInsString,@parms,@inpDate;
go


(我还对上述内容进行了其他一些样式上的更改)

09-06 08:13