字符串变量赋值的规则

jieweibin 2014-06-30 12:29:26

在存储过程中,如下语句
declare @testsql varchar(100)
set @testsql='D:\统计数据'+replace(convert(varchar(20),getdate(),102),':','-')+'.xls' --附件文件名
EXEC msdb.dbo.sp_send_dbmail @profile_name='SVC-mail',
@recipients='305531@qq.com',
@subject='维修统计(上门)',
@body=''定时邮件,
@file_attachments=@testsql --能正常执行,不报错
但 直接 变量值写进去
@file_attachments='D:\统计数据'+replace(convert(varchar(20),getdate(),102),':','-')+'.xls' --附件文件名 ,则会 报错
请问这是为什么?谢谢

另外:请问 SQL Server(2008)数据库里面写存储过程或自定义函数等时的 单引号、+号在拼接字符串时有什么规则?有时如‘+@str1+' , 有时 ''‘+@str1+''' ,请高手指导,谢谢!

...全文
459 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-06-30
  • 打赏
  • 举报
回复
或者你更改命名规则,使用如20140630.xls这样来存放,命名可以看我文章最后一部分: http://blog.csdn.net/dba_huangzj/article/details/7657979

Select CONVERT(varchar(100), GETDATE(), 0)--05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1)--05/16/06
Select CONVERT(varchar(100), GETDATE(), 2)--06.05.16
Select CONVERT(varchar(100), GETDATE(), 3)--16/05/06
Select CONVERT(varchar(100), GETDATE(), 4)--16.05.06
Select CONVERT(varchar(100), GETDATE(), 5)--16-05-06
Select CONVERT(varchar(100), GETDATE(), 6)--16 05 06
Select CONVERT(varchar(100), GETDATE(), 7)--05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8)--10:57:46
Select CONVERT(varchar(100), GETDATE(), 9)--05 16 200610:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10)--05-16-06
Select CONVERT(varchar(100), GETDATE(), 11)--06/05/16
Select CONVERT(varchar(100), GETDATE(), 12)--060516
Select CONVERT(varchar(100), GETDATE(), 13)--16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14)--10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20)--2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21)--2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22)--05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23)--2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24)--10:57:47
Select CONVERT(varchar(100), GETDATE(), 25)--2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100)--05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101)--05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102)--2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103)--16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104)--16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105)--16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106)--16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107)--05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108)--10:57:49
Select CONVERT(varchar(100), GETDATE(), 109)--05 16 200610:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110)--05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111)--2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112)--20060516
Select CONVERT(varchar(100), GETDATE(), 113)--16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114)--10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120)--2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121)--2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126)--2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130)--18 ???? ?????? 142710:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131)--18/04/142710:57:49:920AM
發糞塗牆 2014-06-30
  • 打赏
  • 举报
回复
windows文件不能有多个.号,你那样命名输出的文件名就有多个.号,所以报错
發糞塗牆 2014-06-30
  • 打赏
  • 举报
回复
declare @testsql varchar(100)
set @testsql='D:\统计数据'+QUOTENAME(replace(convert(varchar(20),getdate(),102),':','-'))+'.xls'
你可以考虑用这种方法来保证对.号的使用不会影响Windows的命名
發糞塗牆 2014-06-30
  • 打赏
  • 举报
回复
有些参数需要在外层定义,有些参数可以在使用时定义,我个人习惯是先定义再使用(受C#影响),目前没发现这种习惯有问题,至于有些问题为什么会这样,我觉得暂时没必要深究
jieweibin 2014-06-30
  • 打赏
  • 举报
回复
谢谢版主!我到你博客里看看,里面有少东西可以学习!
發糞塗牆 2014-06-30
  • 打赏
  • 举报
回复
@file_attachments是NVARCHAR类型,你定义的话最好相同类型,否则可能出现乱码等。
declare @testsql varchar(100)
set @testsql='D:\统计数据'+replace(convert(varchar(20),getdate(),102),':','-')+'.xls' 
print @testsql
你可以试试,这个print出来的文件名是不符合windows的文件命名规则
jieweibin 2014-06-30
  • 打赏
  • 举报
回复
DBA_Huangzj :你好!你可能没看清楚我写的问题,如果先定义变量,然后用 set赋值形成文件名,再传递给 邮件发送中的参数 @file_attachments,可以正常发送;但如果事先不定义变量,而是 直接把它传过去就不行 @file_attachments='D:\统计数据'+replace(convert(varchar(20),getdate(),102),':','-')+'.xls'

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧