J'essaie de créer une vue Le code SQL fonctionne comme tel (je l'utilise à l'aide de VS2008), Mais dans SQL Server, je suis incapable de l'enregistrer, car le message d'erreur "déclarer la variable scalaire @stardate" et "déclarer la variable scalaire @enddate" apparaît. P> Voici le code: P > et ma question est bien sûr - comment dois-je les déclarer? strong> p> J'ai essayé de mettre les premiers suivants dans le code : p> mais ce n'est pas fait l'affaire, tout comme je m'attendais - cela ne m'a donné qu'un autre message contextuel: p> "Le déclarer Cursor SQL Construction ou déclaration n'est pas prise en charge. " P> P>
4 Réponses :
si par Si vous voulez dire quelque chose d'autre, Ajoutez Créer une vue ... code>), vous ne pouvez pas utiliser de variables locales du tout (vous utiliseriez une table-valorisée udf à la place). p>
Declare @startdate DateTime, @enddate DateTime Code> Fait que l'énoncé Analyse bien, est-ce l'intégralité du SQL? P>
Je veux dire que je dans le SQL Server Management Studio clique droit sur le dossier "Vues" et sélectionne "Nouvelle vue ..." - J'ai créé d'autres vues de cette façon, puis je les utilise dans Visual Studio 2008 (C #) à Utilisez-les lorsque vous créez des "tableaux de table", par exemple. Eh bien, qu'est-ce qu'un UDF de valorisation de la table? Où et comment puis-je le créer, savez-vous?
Comme Alex K l'a mentionné, vous devez l'écrire sous la forme d'une fonction de table en ligne. Voici le article qui décrit à ce sujet.
En bref, la syntaxe serait quelque chose comme p> Vous pouvez avoir une requête sélectionnée (si complexe peut utiliser CTE). Et ensuite vous l'utiliserez comme p>
Nice, va tester cela - je le vois comme une réponse acceptable :-)
Les inconvénients des fonctions sont qu'ils sont très mal performants si vous souhaitez rejoindre ou filtrer dessus.
@IanBoyd, ce que vous dites est généralement vrai pour les fonctions TVF multi-instructions et scalaires. Cependant, la solution utilise ici une fonction de valorisation de la table en ligne. AFAIK, SQL Server élargirait l'UDF dans la requête (juste commee à la vue). Par conséquent, contrairement à ce que vous avez indiqué, ils travailleraient beaucoup mieux dans la jointure / le filtre (en supposant que les tableaux participants disposent d'indices appropriés) ou du moins, il ne devrait y avoir aucune pénalité (autre qu'une analyse supplémentaire) pour l'utilisation de TVF en ligne. Voir voir Voir blogs.msdn.com/b/psssql/archive/2010/10/28/...
Serait-il un avantage supplémentaire d'ajouter avec schéma?
@Mark, avec schéma, code> est toujours bénéfique en raison des contrôles de dépendance associés (c'est-à-dire éviter de casser l'UDF en raison de changements de schéma). Mais si vous demandez du point de vue de la performance, il n'y a pas d'avantage - cela s'applique aux fonctions scalaires (voir blogs.msdn.com/b/sqlprogrammabilité/archive/2006/05/12/... )
Essayez de remplacer tout votre @x, @y avec A.x et A.Y, ajouter à votre code: De (sélectionnez x = 'littéralx', y = 'littéralement') a Ensuite, vous avez mis tous vos littéraux à un endroit et n'en avez qu'un seul copie. p>
Voici une requête d'échantillon qui utilise CTE pour imiter joliment la construction variable interne. Vous pouvez le tester dans votre version de SQL Server.
WITH params AS ( SELECT varType='%Admin%', varMinStatus=1) SELECT status, name FROM sys.sysusers CROSS APPLY params WHERE status > varMinStatus OR name LIKE varType