2016-12-07 2 views
0

Dies ist mein Code:SQL Einstellung Spaltenname als Funktion von String

-- Create Function 
if object_id('dbo.J_TRIM') is not null drop function dbo.J_TRIM 
GO 
CREATE FUNCTION dbo.J_TRIM(@string VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
BEGIN 
RETURN LTRIM(RTRIM(@string)) AS [@string] 
END 
GO 

SELECT dbo.J_TRIM(Supplier) FROM Supplier_List 

Es funktioniert alles außer wenn ich versuche, mithilfe von AS [@string] die Spaltennamen als Zeichenfolge zu setzen. Ist dies in SQL möglich und wenn ja, wie behebe ich meinen Code?

+2

Dies ist eine skalarwertige Funktion. Es hat * keinen * Spaltennamen, es hat einen (unbenannten) Rückgabewert. Wenn Sie einen Spaltennamen vergeben wollen, müssen Sie dies im äußeren SELECT tun. –

+1

Übrigens, eine Funktion wie diese wird dir nur Kummer bereiten. Der Optimierer ist schrecklich mit skalarwertigen Funktionen. Sie werden viel bessere Ergebnisse erzielen, indem Sie einfach 'LTRIM (RTRIM (...))' jedes Mal schreiben oder (wenn die Wiederverwendung der Logik sich lohnt, wie es hier nicht der Fall ist) die Funktion als Inline-Tabellenwertfunktion umschreiben. Verlernen Sie das, was Sie aus Programmiersprachen kennen. –

Antwort

1

Was soll diese Funktion tun? Funktionen geben Werte zurück, keine Werte mit Namen. So können Sie einfach tun:

CREATE FUNCTION dbo.J_TRIM(@string VARCHAR(MAX)) 
    RETURNS VARCHAR(MAX) 
BEGIN 
    RETURN LTRIM(RTRIM(@string)); 
END; 
GO 

Wenn Sie Aufruf die Funktion, dann können Sie es einen Aliasnamen geben:

SELECT dbo.J_TRIM(Supplier) as Supplier 
FROM Supplier_List ; 
Verwandte Themen