J'essaie de mettre en place une ancienne solution qui publie un certain nombre de fonctions .net dans une database SQL Server. Mais la tentative de publication vers une nouvelle database échoue sur une fonction qui manipule les dates.
La fonction qui échoue est:
[SqlFunction(TableDefinition="localtime datetime2", IsDeterministic=true, IsPrecise=true, DataAccess=DataAccessKind.None, SystemDataAccess=SystemDataAccessKind.None)] public static DateTime ConvertFromUTC(DateTime utctime, ssortingng timezoneid) { if (utctime.Kind == DateTimeKind.Unspecified) utctime = DateTime.SpecifyKind( utctime, DateTimeKind.Utc ); utctime = utctime.ToUniversalTime(); return TimeZoneInfo.ConvertTimeBySystemTimeZoneId( utctime, timezoneid ); }
Le message d'erreur que j'obtiens en essayant de publier est:
Création [dbo]. [ConvertFromUTC] …
- Quel est le meilleur moyen de stocker et de récupérer des adresses postales en utilisant une database SQL Server et le framework .NET?
- Les parameters T-Sql SET seront-ils réinitialisés avec les connections .NET groupées?
- Comment conserver les insertions de colonne datetime2 uniques
- Délais d'expiration de la connection random SQL 2005 / meilleure pratique concernant les timeouts d'attente de la database
- SQL Server en tant que client Web Serivce
(268,1): SQL72014: Fournisseur de données SqlClient .Net:
Msg 6551, niveau 16, état 2, procédure ConvertFromUTC, ligne 1
CREATE FUNCTION pour "ConvertFromUTC" a échoué car les types T-SQL et CLR pour la valeur de return ne correspondent pas.(268,0): SQL72045: Erreur d'exécution du script
SQL généré à partir du file .net dans le but d'append la fonction:
CREATE FUNCTION [dbo].[ConvertFromUTC] (@utctime DATETIME, @timezoneid NVARCHAR (MAX)) RETURNS TABLE ([localtime] DATETIME2 (7) NULL) AS EXTERNAL NAME [database].[IntelligentTutor.Database.Functions].[ConvertFromUTC]
Définition SQL pour la version de la fonction dans la database existante (ce qui confirme que @MattJohnson avait raison sur la façon dont il a besoin d'être corrigé):
CREATE FUNCTION [dbo].[ConvertFromUTC] (@utctime [datetime], @timezoneid [nvarchar](4000)) RETURNS [datetime] WITH EXECUTE AS CALLER AS EXTERNAL NAME [database].[IntelligentTutor.Database.Functions].[ConvertFromUTC]
La fonction SQL ne correspond pas à la signature de la méthode .NET. Pour le faire correspondre:
Changez le type de @utctime
en DATETIME2
au lieu de DATETIME
dans la définition de la fonction.
Modifiez le type de return à simplement RETURNS DATETIME2
au lieu de renvoyer une table avec une colonne nulletime datetime2.
Notez également que si vous utilisez SQL 2016 ou une version ultérieure, ou Azure SQL DB, vous n'avez pas besoin de cette fonction, car vous pouvez désormais utiliser AT TIME ZONE
.