/ / Le script sql a besoin d'une instruction encapsulée - sql-server, tsql

Le script sql a besoin d'une instruction encapsulée - sql-server, tsql

J'essaie d'envelopper une fonction simple dans une vérification d'existence, pourquoi est-ce que j'obtiens une syntaxe incorrecte?

actualisé:

GO

IF EXISTS (SELECT TOP 1 * FROM Customers)
BEGIN
USE [rstestDB]

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

CREATE FUNCTION [dbo].[udf_GetName]
(
@p1 nvarchar(25)
)
RETURNS varchar
AS
BEGIN
DECLARE @Result varchar(25)
SELECT @Result = "John Doe"
RETURN @Result
END
END
GO

Erreur suivante: Msg 156, niveau 15, état 1, ligne 10 Syntaxe incorrecte près du mot clé "FUNCTION". Msg 178, niveau 15, état 1, ligne 19 Une instruction RETURN avec une valeur de retour ne peut pas être utilisée dans ce contexte.

Réponses:

5 pour la réponse № 1

GO est un séparateur par lots.

GO est une commande reconnue par les utilitaires sqlcmd et osql qui envoient des commandes au moteur SQL, le SQL n'est pas valide.

Sortez tous les GOs sauf à la toute fin.

Un exemple plus simple qui échouera également:

IF 1=1
BEGIN
SELECT "FOO"
GO
END

Tous vos paramètres doivent être au tout début du script, car ils persisteront pendant toute la durée de la session.