Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用内联参数计算调用存储过程时出现TSQL错误_Sql Server - Fatal编程技术网

Sql server 使用内联参数计算调用存储过程时出现TSQL错误

Sql server 使用内联参数计算调用存储过程时出现TSQL错误,sql-server,Sql Server,我正在尝试将一些oracle转换为SQL Server,但调用存储过程时遇到问题。以下电话: Exec VEO_ADD_EVENT_NOTE p_DIVCODE, p_IncidentRef, p_UserID, 'A', format(getdate(),'dd/MM/yyyy HH:mm') +

我正在尝试将一些oracle转换为SQL Server,但调用存储过程时遇到问题。以下电话:

Exec VEO_ADD_EVENT_NOTE p_DIVCODE, 
                        p_IncidentRef, 
                        p_UserID, 'A',  
                        format(getdate(),'dd/MM/yyyy HH:mm') + 
                        ' ' + Logged_FName + 
                        ' ' + Logged_LName + char(10) + 
                        'Template changed.';
产生此错误

Msg 102,15级,状态1,服务器TRAC-LEEDS-11,第1行
“getdate”附近的语法不正确


发生了什么事?

在这件事上胡闹了一段时间后,我意识到

在sql server中,不能使用内联参数计算调用过程

我真的希望一些文档能用粗体大写字母告诉你这一点
作为一个来自非sql语言、没有那么多怪癖的人,这类事情令人困惑

如果我将代码更改为:

declare @text nvarchar(Max)
set @text = format(getdate(), 'dd/MM/yyyy HH:mm') + ' ' + Logged_FName + ' ' + Logged_LName + char(10) + 'Template changed.';

Exec VEO_ADD_EVENT_NOTE p_DIVCODE, p_IncidentRef, p_CompassUserID, 'A',  @text
然后,我开始得到其他更预期的错误:

Msg 207, Level 16, State 1, Server TRAC-LEEDS-11, Line 2
Invalid column name 'Logged_FName'.
Msg 207, Level 16, State 1, Server TRAC-LEEDS-11, Line 2
Invalid column name 'Logged_LName'.

请注意,这实际上意味着您需要一个“@”。另一条高质量错误消息

您能显示过程定义吗?@Raj您的编辑已经搞乱了代码和错误消息之间的关系。如何?滚动阅读并理解一行代码是很困难的。我没有更改您的代码,是吗?@Raj我可以理解,但我认为错误现在出现在第4行而不是第一行,因为错误消息saysIt在文档中有详细说明,但可能不是以明显的方式。我曾多次希望为SQL Server文档提供“如何阅读此文档”,但它目前不存在。比较并注意,
SELECT
允许显示表达式,它几乎可以是任意的,
EXEC
只有value、@variable或DEFAULT选项,并且每个选项都是严格定义的。至少关于
无效列名的部分非常明显,由于变量名需要以
@
开头,而
Logged\u FName
不需要,SQL引擎认为它必须是一个列,而不是一个列。这样就出现了错误。@ThorstenDittmar我想除了你还必须记住,当你声明一个变量作为游标时,它不能有@JonnyLeeds,你对游标的看法是正确的。但我一直认为可能有一个
@
,但不需要一个?让我进一步用它来迷惑你。不带
@
的参数被解释为字符串。