语法不正确' +' - SQL / TSQL

时间:2015-01-07 18:16:37

标签: sql sql-server tsql ssms

尝试执行此操作(在SQL Server Management Studio中)

DECLARE @fun as int
SET @fun = 40
PRINT 'String' + 'Hello!'

EXEC msdb.dbo.sp_senddbmail
    @profile_name = 'Some working profile',
    @recipients = 'someone@example.ca',
    @subject =  'String' + 'Hello!',
    @body = 'Test email sendout'

出现此错误:

  

Msg 102,Level 15,State 1,Line 8
  “+”附近的语法不正确。

注意第一个连接工作,第二个连接不工作。

我采取的步骤:

重新输入全部(因此它不是复制粘贴错误)。尝试将其更改为('String'+'Hello!')并得到错误Incorrect syntax near '('.所以我感觉有点迷失。

编辑2:我已经更改了示例,因为当它的两个字符串没有涉及强制转换时会发生同样的错误

2 个答案:

答案 0 :(得分:12)

传递给存储过程参数的值(在T-SQL中)必须是,“单个值”(暂时不能想到技术术语)。您不能使用以下代码:

@subject = A + B + C

你只能拥有像

这样的代码
@subject = A

所以在这种情况下,你需要类似的东西:

DECLARE
  @fun      int
 ,@Subject  nvarchar(255)

SET @fun = 40

SET @Subject = 'String' + 'Hello!'

EXEC msdb.dbo.sp_send_dbmail  --  Added the second underscore...
    @profile_name = 'Some working profile',
    @recipients = 'someone@example.ca',
    @subject = @Subject,
    @body = 'Test email sendout'

答案 1 :(得分:3)

试试这个,将int值转换为varchar,然后将其与另一个varchar值连接

DECLARE @fun as int
SET @fun = 40
PRINT convert(varchar(10), @fun) + 'Hello!'

EXEC msdb.dbo.sp_senddbmail
@profile_name = 'Some working profile',
@recipients = 'someone@example.ca',
@subject =  convert(varchar(10), @fun) + 'Hello!',
@body = 'Test email sendout'