Visual Studio échoue à déployer un projet de base de données. Il essaie de supprimer les fonctions qui sont déjà référencées (par exemple, dans une contrainte de vérification), plutôt que d'ajouter les nouvelles et de mettre à jour celles qui existent déjà, de sorte que le déploiement échoue toujours. Par conséquent, j'écris mon propre code pour mettre à jour l'assemblage et ajouter/mettre à jour toutes les fonctions.
Je suppose que le compilateur/déployeur utilise la réflexion et les propriétés de l'attribut SqlFunction, donc j'utilise également la réflexion pour rassembler une liste MethodInfo des méthodes statiques qui ont l'attribut SqlFunction.
Question/Tâche:
je dois savoir comment traduire les propriétés de SqlFunctionAttribute (par exemple IsDeterministic, DataAccess, Nom, IsPrecise, etc.) et la signature de la méthode de la fonction dans un T-SQL approprié Instruction "CREATE FUNCTION".
Les informations existantes, je l'ai déjà trouvé ne pas être utile:
Le documentation pour « créer la fonction » est source de confusion et incomplète. Vers le bas, il mentionne finalement certaines des propriétés de SqlFunction comme IsDeterministic, mais il en parle comme s'il s'agissait de propriétés C#, pas de paramètres T-SQL, donc je n'ai aucune idée de comment les utiliser dans une instruction create function.
//CLR Functions
CREATE FUNCTION [ schema_name. ] function_name
({ @parameter_name [AS] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
)
RETURNS { return_data_type | TABLE <clr_table_type_definition> }
[ WITH <clr_function_option> [ ,...n ] ]
[ AS ] EXTERNAL NAME <method_specifier>
[ ; ]
j'attendre le paramètre clr_function_option
pour gérer les choses comme IsDeterministic, mais ce n'est pas répertorié comme une option.
Pendant ce temps, dans la documentation pour IBM DB2, je vois des déclarations comme ce qui suit, que la documentation MSDN n'a rien de semblable:
CREATE FUNCTION countUp(INTEGER)
RETURNS INTEGER
LANGUAGE CLR
PARAMETER STYLE SQL
SCRATCHPAD 10
FINAL CALL
NO SQL
FENCED
THREADSAFE
NOT DETERMINISTIC
EXECUTION CONTORL SAFE
EXTERNAL NAME 'gwenUDF.dll:bizLogic.empOps!CountUp' ;
Vous devez copier l'assembly sur votre serveur SQL, puis utilisez le T-SQL approprié. Je peux montrer le SQL complet quand je reviens à mon PC dans quelques heures. – Portman
Obtenir l'assemblage et le mettre à jour est assez facile. Il s'agit de mettre les fonctions en place et de les mettre à jour une fois qu'elles sont déjà référencées, ce qui est difficile. Visual Studio ne peut pas le gérer, car il essaie d'abandonner les fonctions et ne peut pas les utiliser car il est utilisé dans les contraintes de vérification. Ce dont j'ai vraiment besoin, c'est le code pour une fonction comme "string GetSQLForCreateFunction (MethodInfo m);", où la méthode a un attribut SqlFunction. – Triynko