Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskaj dostęp do TimeZoneInfo z SQL 2005 Server

Właśnie skończyłem to robić na bazie danych SQL 2008.

Najpierw musiałem ustawić DB jako godny zaufania i zweryfikować, czy właściciel był poprawny.

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

exec sp_changedbowner 'sa'
go

Następnie stworzyłem rozwiązanie .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

Przed wdrożeniem ustawiam poziom uprawnień na Niebezpieczny .

Następnie wdrożyłem go, sprawdziłem okno Output pod kątem błędów kompilacji i poprawiłem je.

Oto 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kilka świetnych wiadomości dla klientów wersji Standard Edition w programie SQL Server 2014

  2. SQL Server:Alternatywa dla długiej instrukcji CASE

  3. Znajdź zależności w SQL Server:sql_expression_dependencies

  4. Jak uzyskać najnowszy rekord z tabeli SQL Server na podstawie znacznika czasu?

  5. Prosty sposób na uniknięcie błędu dzielenia przez zero w SQL