У меня есть DDL код для создания функции, которая работает безотказно от Sqlcmd и других конкретных клиентов SQL Server:Run создать функциональный код без SQLCMD
/*
* É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
Однако, это не будет работать, как правило, от клиентов кросс-СУБД (SQL Fiddle, DBeaver, HeidiSQL ...):
[102] Неправильный синтаксис рядом с '@cadena'.
Я подозреваю, что это связано с тем, что пакетный разделитель GO
не выполняется. Если это так, есть ли альтернативный синтаксис?
Вы должны сообщить этим клиентам, что используете другой разделитель. В SQL Fiddle вы можете сделать это с выпадающим списком, который изначально показывает '[; ] 'под редактором исходного кода. Другие SQL-клиенты должны иметь аналогичные параметры. –
@a_horse_with_no_name Я изменил на '[go]' компиляцию схемы, но все же не могу использовать функцию, что еще не хватает? [sqlFiddle] (http://sqlfiddle.com/#!6/9f008/3) –
В SQL Server у вас ** есть ** для префикса написанных пользователем функций с помощью схемы/владельца: 'SELECT dbo.LPAD ('hola' , 10, '+'); 'http://sqlfiddle.com/#!6/9f008/4 –