sql >> Databáze >  >> RDS >> Sqlserver

Získejte přístup k TimeZoneInfo ze serveru SQL 2005 Server

Právě jsem to dokončil na databázi SQL 2008.

Nejprve jsem musel nastavit DB na důvěryhodné a ověřit, že vlastník je správný.

use [myDB]
go
alter database [myDB] set trustworthy on
go

exec sp_changedbowner 'sa'
go

Dále jsem vytvořil řešení .NET

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Collections.ObjectModel
Imports System.Runtime.InteropServices

Partial Public Class StoredProcedures
    <Microsoft.SqlServer.Server.SqlProcedure()> _
    Public Shared Sub sp_ConvertTime(ByVal UTCTime As DateTime, ByVal ZoneID As String, <Out()> ByRef Output As DateTime)
    Dim sp As SqlPipe = SqlContext.Pipe

    Dim ConvertedTime As DateTime
    Dim tzUTC = TimeZoneInfo.FindSystemTimeZoneById("UTC")
    Dim tzNew = TimeZoneInfo.FindSystemTimeZoneById(ZoneID)

    ConvertedTime = TimeZoneInfo.ConvertTime(UTCTime, tzUTC, tzNew)

    Output = ConvertedTime
    sp.Send(ConvertedTime)

    ConvertedTime = Nothing
    tzUTC = Nothing
    tzNew = Nothing
    sp = Nothing

End Sub
End Class

Před nasazením jsem nastavil úroveň oprávnění na Nebezpečné .

Poté jsem jej nasadil, zkontroloval jsem výstupní okno pro chyby sestavení a opravil jsem je.

Zde je test SQL

DECLARE @UTCTime datetime
DECLARE @ZoneID varchar(21)
DECLARE @NewTime datetime

SET @UTCTime = GETUTCDATE()
SET @ZoneID = 'Central Standard Time'

exec sp_ConvertTime @UTCTime, @ZoneID, @NewTime OUTPUT
select @NewTime AS NewTime


  1. Vytvářejte uložené procedury s PDO v PHP

  2. Opakování ve výběrovém dotazu

  3. MySQL a zamkněte tabulku, přečtěte si ji a pak ji ořízněte

  4. Base64 jako metoda dezinfekce uživatelského vstupu pro Mysql