首页新闻找找看学习计划

SQL 语句转换 ' '问题

0
[已解决问题] 解决于 2019-05-26 15:24

@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+',不是变量所表示的名字

如何在存储过程中创建新表复制数据,同时进行传入参数比较

浪迹枫叶的主页 浪迹枫叶 | 初学一级 | 园豆:192
提问于:2019-05-26 14:34
< >
分享
最佳答案
0

'+@TableName+' 改为 ''+@TableName+'',2个单引号可以转义单引号

奖励园豆:5
dudu | 高人七级 |园豆:41124 | 2019-05-26 14:43

改成双引号后
''+@TableName+''
语句就变成了
[记录时间] <= '+@DataTime+'
引号是有了,同时变量的代表的值成了+@DataTime+

SQL语法就不对了

浪迹枫叶 | 园豆:192 (初学一级) | 2019-05-26 14:49

@浪迹枫叶: 情况一的解决方法

set @SQL_Com='select * into [Mes].[dbo].['+@TableName+'] from [Mes].[dbo].[数据表] where [记录时间] <= '''+@DataTime+''''
dudu | 园豆:41124 (高人七级) | 2019-05-26 14:58

@dudu: 无法执行语句,SQL 从字符串转换日期和/或时间时,转换失败。

浪迹枫叶 | 园豆:192 (初学一级) | 2019-05-26 15:02

@浪迹枫叶: print @DataTime 看看

dudu | 园豆:41124 (高人七级) | 2019-05-26 15:17

@浪迹枫叶: SSMS 的消息窗口会显示 print @DataTime 的值

dudu | 园豆:41124 (高人七级) | 2019-05-26 15:19

@dudu: 搞定了 格式问题,没有注意到dateadd(DD,-10,getdate()) 出来之后格式:05 16 2019 3:20PM,需要转换,非常感谢!

浪迹枫叶 | 园豆:192 (初学一级) | 2019-05-26 15:24
其他回答(1)
0

参数化传入即可
EXEC sys.sp_executesql @insertSql, N'@voucherId int '
,@voucherId

Aigu | 园豆:204 (菜鸟二级) | 2019-05-27 17:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册