@TableName --变量,表名称,vchar
@DataTime --变量,时间 datetime
@@SQL_Com --变量,vchar
情况一:
set @SQL_Com='select * into [Mes].[dbo].['+@TableName+'] from [Mes].[dbo].[数据表] where [记录时间] <= '+@DataTime+''
exec (@SQL_Com)
'+@DataTime+'时间前后少1对 ' 号,一直语法报错;
情况2 SQL语句:
select * into [Mes].[dbo].['+@TableName+'] from [Mes].[dbo].[数据表] where [记录时间] <= @DataTime
语法不错,但是表的名称是:'+@TableName+',不是变量所表示的名字
如何在存储过程中创建新表复制数据,同时进行传入参数比较
'+@TableName+'
改为 ''+@TableName+''
,2个单引号可以转义单引号
改成双引号后
''+@TableName+''
语句就变成了
[记录时间] <= '+@DataTime+'
引号是有了,同时变量的代表的值成了+@DataTime+
SQL语法就不对了
@浪迹枫叶: 情况一的解决方法
set @SQL_Com='select * into [Mes].[dbo].['+@TableName+'] from [Mes].[dbo].[数据表] where [记录时间] <= '''+@DataTime+''''
@dudu: 无法执行语句,SQL 从字符串转换日期和/或时间时,转换失败。
@浪迹枫叶: print @DataTime
看看
@浪迹枫叶: SSMS 的消息窗口会显示 print @DataTime
的值
@dudu: 搞定了 格式问题,没有注意到dateadd(DD,-10,getdate()) 出来之后格式:05 16 2019 3:20PM,需要转换,非常感谢!
参数化传入即可
EXEC sys.sp_executesql @insertSql, N'@voucherId int '
,@voucherId