运行 创建没有 SQLCMD 的函数代码

Run create function code without SQLCMD

我有 DDL 代码来创建 运行 完美地来自 sqlcmd 和其他特定 SQL 服务器客户端的函数:

/*
 * Émulo de la función LPAD() de Oracle
 */
CREATE FUNCTION LPAD
(
    @cadena VARCHAR(MAX), -- Texto de partida
    @tamano INT,          -- Tamaño de la cadena resultante
    @relleno CHAR         -- Carácter de relleno
)
RETURNS VARCHAR(MAX)
AS
BEGIN
    return REPLICATE(@relleno, @tamano - LEN(@cadena)) + @cadena;
END
GO

但是,它通常不会 运行 来自跨 DBMS 客户端(SQL Fiddle、DBeaver、HeidiSQL...):

[102] Incorrect syntax near '@cadena'.

我怀疑这与未实施 GO 批处理分隔符有关。如果是这样,是否有替代语法?

总结一下我的评论:

SQL 中的标准分隔符是 ;

但是,当 运行 包含嵌入分号的代码块(例如,创建存储过程时)时,无法应用标准分隔符,因为在这种情况下,不会作为单一声明发送。

对于这些情况,SQL 客户端通常有一些方法来定义标记块结束的备用分隔符,并且通常比 ;

具有更高的优先级

Microsoft 将此 "alternate delimiter" 称为 "batch separated" 并决定为此使用 GO,所有 Microsoft 工具都坚持这一点。在 SSMS 中,这个批次分隔符实际上可以配置为其他东西。

Oracle 的 SQL*Plus(和 SQL 开发人员)为此使用 /

其他 SQL 客户端允许在 SQL 脚本中进行动态定义,通常使用 delimiter(或类似的东西)来更改后续语句的分隔符。

因为我从未使用过 DBeaver 或 HeidiSQL,所以我不知道这些 SQL 客户端是如何完成的。