2016-06-06 1 views
1

Avec SQL Server 2016, je peux exécuter cette requête simple:Créer une vue et pour Json clause

SELECT colA, colB, json_query(infoJson) AS Expr1 
FROM dbo.Table_1 
FOR  json auto 

Je peux même l'envelopper dans une procédure stockée. Et ça fonctionne bien.

Mais quand j'ai essayé de créer une vue de cette déclaration, quelque chose de bizarre (au moins pour moi):

CREATE VIEW [dbo].[View_1] 
AS 
SELECT colA, colB, json_query(infoJson) AS Expr1 
FROM  dbo.Table_1 
FOR  json auto 

C'est l'erreur que je reçois:

Msg 4511, Niveau 16, État 1, procédure VIEW_1, ligne 5 [lot ligne de départ 9] Créer ou fonction a échoué car aucun nom de colonne a été spécifiée pour la colonne 1.

Mais dès que je commente --for json auto, le VIEW est créé comme prévu.

Pourquoi? Je voudrais vraiment avoir FOR JSON dans ma vue sql.

+0

Votre vue vous demande de nommer la colonne json. –

+0

ce n'est pas ça. Le point est que je ne peux pas appliquer 'pour json' dans une vue. – sqlsrvrCurious

+0

l'erreur est trompeuse – sqlsrvrCurious

Répondre

3

FOR XML | JSON AUTO renvoie une seule colonne (caractère LOB). Vous devez donc modifier l'instruction SELECT pour renvoyer une seule colonne dans la vue, comme:

CREATE VIEW [dbo].[View_1] 
AS 
SELECT (
SELECT colA, colB, json_query(infoJson) AS Expr1 
FROM  dbo.Table_1 
FOR  json auto 
) as X 
+0

DROIT! ... merci Umachandar – sqlsrvrCurious

+0

C'est un brillant technique pour contourner le problème avec SSMS envelopper le résultat d'une requête SQL pour JSON - cela doit être connu plus largement. - Top work – MrTelly

+0

Mais cela ne fonctionnera pas avec l'instruction TOP –