2017-03-04 3 views
0

Mein Verständnis ist, dass es nicht möglich ist, eine temporäre Tabelle einzurichten, in der die Basistabelle eine berechnete Spalte basierend auf einer UDF aufweist. Ich habe jedoch gesehen vorgeschlagen, dass dies möglich sein sollte, wenn Sie einen bestimmten Prozess folgen: Computed Columns In Azure SQL Server 2016 Temporal TablesBerechnete Spalten mit temporalen Tabellen

Die vorgeschlagenen Schritte sind

  • Schalten Sie zunächst System Versionierung
  • dann Ihre berechnete Spalte addieren, Basistabelle
  • Verify „Typ“ der resultierenden berechneten Spalte
  • In der Säule mit dem entsprechenden statischen Typ in die Geschichtstabelle
  • Systemversionierung zurück auf

Es könnte sein, dass diese Lösung nur in Azure funktioniert. Ich habe es mit SQL Standard ausprobiert, indem ich eine Tabelle verwende, die eine UDF-berechnete Spalte vom Typ datetime hat, aber ohne Erfolg. Ist jemand in der Lage gewesen, dies zur Arbeit zu bringen und wenn ja, könnten Sie bitte ein einfaches TSQL-Beispiel teilen.

Tnx

Antwort

0

Die gleiche Situation ist für Azure und nicht-Azure-Umgebung.

Sie müssen Funktion auf der gleichen Datenbank erstellen ->tempdb. Erstellen Sie Ihre Funktion auf Tempdb und es wird funktionieren. Aber es wird entsorgt werden, während SQL Server neu gestartet wird. Berechnete Spalte mit Funktion ist durch das Datenbankmodell begrenzt.

Die Lösung, die Sie erwähnt haben, ist für Tabelle mit row versioning feathure. Aber die gleiche Regel für die Funktion.

Beispiel:

-- have to use tempdb 
    use tempdb 
    go 

    -- UDF 
    create function [dbo].ReturnSeven() 
    returns int 
    with schemabinding 
    begin 
     return 7 
    end 

    -- table 
    if object_id('tempdb..#TmpSevenTable') is not null drop table #TmpSevenTable 
    create table #TmpSevenTable (
     pk int not null unique, 
     seven as dbo.ReturnSeven() persisted, 
     mpl_seven as pk * dbo.ReturnSeven() persisted) 

    insert into #TmpSevenTable (pk) select 1 
    insert into #TmpSevenTable (pk) select 3 

    -- look at computed columns 
    select * from #TmpSevenTable 
+0

nicht sicher, ob ich folgen. Um eine temporäre Tabelle für eine Tabelle mit einer berechneten Spalte einzurichten, schlagen Sie vor, dass ich zunächst die Funktion, auf der die berechnete Spalte basiert, zu tempDB hinzufügen muss? Um dies zu verdeutlichen, befinden sich meine Basistabelle und die Verlaufstabelle nicht in TempDB. Ich denke nicht, dass es möglich ist, eine Funktion in tempDB in der Deklaration einer berechneten Spalte zu verwenden. Daher verstehe ich nicht, wie Ihre vorgeschlagene Lösung funktionieren würde. Können Sie mir ein TSQL-Beispiel geben? –

+0

Gern geschehen. – Deadsheep39

+2

Danke, aber was Sie beschrieben beziehen sich auf temporäre Tabellen und nicht temporale Tabellen. –

Verwandte Themen