我在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会抛出错误
Msg 402,Level 16,State 1,Procedure ProcAddDate,Line 7
数据类型varchar(max)和日期在add运算符中不兼容。
如何通过输入'date'类型的值来创建一个允许我向表添加日期的存储过程?
答案 0 :(得分:7)
如果 要执行此操作(如果您要对表名进行参数化,则通常是数据模型损坏的标志),请使用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
(我还对上述内容做了一些其他的风格修改)