'+'附近的语法不正确 - SQL/TSQL

jQw*_*rdy 4 sql t-sql sql-server 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'
Run Code Online (Sandbox Code Playgroud)

得到此错误:

消息102,级别15,状态1,行8
'+'附近的语法不正确.

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

我采取的步骤:

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

编辑2:我已经改变了这个例子,因为当它的两个字符串没有涉及演员表时会发生同样的错误

Phi*_*ley 13

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

@subject = A + B + C
Run Code Online (Sandbox Code Playgroud)

你只能拥有像这样的代码

@subject = A
Run Code Online (Sandbox Code Playgroud)

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

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'
Run Code Online (Sandbox Code Playgroud)


Hav*_*ame 5

试试这个,将 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'
Run Code Online (Sandbox Code Playgroud)