我在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
(我还对上述内容进行了其他一些样式上的更改)