- Beiträge: 15
Arbeiten mit TempTabellen, Rename zum Schluss SQL
- Michael Brockhoff
- Autor
- Offline
- Benutzer
Weniger
Mehr
8 Jahre 2 Wochen her #2906
von Michael Brockhoff
Arbeiten mit TempTabellen, Rename zum Schluss SQL wurde erstellt von Michael Brockhoff
ok Eine Idee wäre das wenn man mit Temporären Tabellen arbeiten möchte.
Man zum Schluss vielleicht ein SQL Statement absetzen könnte das diesen Rename ausführen könnte.
Also in dem Write Adapter selbst einen Haken Setzen „Am Ende folgendes zusatz SQL Script ausführen“
Und dann kann man da selbst zum Beispiel das hier absetzen das
Die 'TMP_PARTNER' in 'DV_PARTNER' umbenennt und das Ganze in einer Transaktion.
-- Beginne eine neue Datenbanktransaktion, so dass während der Ausführung keine
-- Daten gelesen werden können und im Fehlerfall ein Rollback möglich ist.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION ReleaseTable WITH MARK N'RELEASE_DV_PARTNER';
BEGIN TRY
-- Lösche nun die Vorgängertabelle mit älterem Datenbestand.
IF OBJECT_ID('dbo.DV_PARTNER','U') IS NOT NULL
DROP TABLE [dbo].[DV_PARTNER];
-- Ersetze die Vorgängertabelle durch die neu befüllte Zieltabelle.
EXECUTE sp_rename 'TMP_PARTNER', 'DV_PARTNER';
-- Benenne den Primärschlüssel um
ALTER TABLE [dbo].[DV_PARTNER] DROP CONSTRAINT [PK_TMP_PARTNER];
ALTER TABLE [dbo].[DV_PARTNER] ADD CONSTRAINT [PK_DV_PARTNER] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [INDEX]
-- Lösche temporäre Tabellen und Sichten
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON_FAMILIENVERSICHERTER','U') IS NOT NULL
DROP TABLE [dbo].[TMP_VERSICHERTEPERSON_FAMILIENVERSICHERTER];
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON_MITGLIED','U') IS NOT NULL
DROP TABLE [dbo].[TMP_VERSICHERTEPERSON_MITGLIED];
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON_STORNIERT','U') IS NOT NULL
DROP TABLE [dbo].[TMP_VERSICHERTEPERSON_STORNIERT];
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON','V') IS NOT NULL
DROP VIEW [dbo].[TMP_VERSICHERTEPERSON];
-- Bestätige die Transaktion, falls bis hierher kein Fehler auftrat.
COMMIT TRANSACTION ReleaseTable;
SELECT 0;
END TRY
BEGIN CATCH
-- Stelle die Ursprungssitutation im Fehlerfall wieder her. Die Vorgänger-
-- tabelle mit dem älteren Datenbestand bleibt so erhalten.
ROLLBACK TRANSACTION ReleaseTable;
RAISERROR('Die Tabelle DV_PARTNER konnte nicht freigegeben werden.',16,1);
END CATCH
Man zum Schluss vielleicht ein SQL Statement absetzen könnte das diesen Rename ausführen könnte.
Also in dem Write Adapter selbst einen Haken Setzen „Am Ende folgendes zusatz SQL Script ausführen“
Und dann kann man da selbst zum Beispiel das hier absetzen das
Die 'TMP_PARTNER' in 'DV_PARTNER' umbenennt und das Ganze in einer Transaktion.
-- Beginne eine neue Datenbanktransaktion, so dass während der Ausführung keine
-- Daten gelesen werden können und im Fehlerfall ein Rollback möglich ist.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION ReleaseTable WITH MARK N'RELEASE_DV_PARTNER';
BEGIN TRY
-- Lösche nun die Vorgängertabelle mit älterem Datenbestand.
IF OBJECT_ID('dbo.DV_PARTNER','U') IS NOT NULL
DROP TABLE [dbo].[DV_PARTNER];
-- Ersetze die Vorgängertabelle durch die neu befüllte Zieltabelle.
EXECUTE sp_rename 'TMP_PARTNER', 'DV_PARTNER';
-- Benenne den Primärschlüssel um
ALTER TABLE [dbo].[DV_PARTNER] DROP CONSTRAINT [PK_TMP_PARTNER];
ALTER TABLE [dbo].[DV_PARTNER] ADD CONSTRAINT [PK_DV_PARTNER] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [INDEX]
-- Lösche temporäre Tabellen und Sichten
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON_FAMILIENVERSICHERTER','U') IS NOT NULL
DROP TABLE [dbo].[TMP_VERSICHERTEPERSON_FAMILIENVERSICHERTER];
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON_MITGLIED','U') IS NOT NULL
DROP TABLE [dbo].[TMP_VERSICHERTEPERSON_MITGLIED];
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON_STORNIERT','U') IS NOT NULL
DROP TABLE [dbo].[TMP_VERSICHERTEPERSON_STORNIERT];
IF OBJECT_ID('dbo.TMP_VERSICHERTEPERSON','V') IS NOT NULL
DROP VIEW [dbo].[TMP_VERSICHERTEPERSON];
-- Bestätige die Transaktion, falls bis hierher kein Fehler auftrat.
COMMIT TRANSACTION ReleaseTable;
SELECT 0;
END TRY
BEGIN CATCH
-- Stelle die Ursprungssitutation im Fehlerfall wieder her. Die Vorgänger-
-- tabelle mit dem älteren Datenbestand bleibt so erhalten.
ROLLBACK TRANSACTION ReleaseTable;
RAISERROR('Die Tabelle DV_PARTNER konnte nicht freigegeben werden.',16,1);
END CATCH
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
8 Jahre 2 Wochen her - 8 Jahre 2 Wochen her #2910
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Arbeiten mit TempTabellen, Rename zum Schluss SQL
Hallo Herr Brockhoff,
vielen Dank für die Anregung. Das können Sie bereits jetzt mit dem SQL Heater durchführen.
Sie können im SQL Heater einstellen wann der SQL Befehl (bzw. auch mehrere) abgesetzt werden sollen. Es stehen hier „Start“, „Ende“ und „Pro Zeile/Satz = Standard“ zur Verfügung.
Wenn Sie hier einmal einen SQL Heater mit „Start“ verwenden wo Sie Ihre Temporäre Tabelle anlegen (Create Table) und einen SQL Heater mit „Ende“ wo Sie dann die Tabelle umbenennen haben Sie das was Sie benötigen.
Wenn Sie im SqlServer Adapter im Reiter „Erweitert“ „Verwende Datenbank Transaktionen“ anwählen wird das Ganze auch noch über Transaktionen abgesichert.
SQL Statement bei Import Start/Ende ausführen
vielen Dank für die Anregung. Das können Sie bereits jetzt mit dem SQL Heater durchführen.
Sie können im SQL Heater einstellen wann der SQL Befehl (bzw. auch mehrere) abgesetzt werden sollen. Es stehen hier „Start“, „Ende“ und „Pro Zeile/Satz = Standard“ zur Verfügung.
Wenn Sie hier einmal einen SQL Heater mit „Start“ verwenden wo Sie Ihre Temporäre Tabelle anlegen (Create Table) und einen SQL Heater mit „Ende“ wo Sie dann die Tabelle umbenennen haben Sie das was Sie benötigen.
Wenn Sie im SqlServer Adapter im Reiter „Erweitert“ „Verwende Datenbank Transaktionen“ anwählen wird das Ganze auch noch über Transaktionen abgesichert.
SQL Statement bei Import Start/Ende ausführen
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Letzte Änderung: 8 Jahre 2 Wochen her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Brockhoff
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 15
8 Jahre 2 Wochen her #2911
von Michael Brockhoff
Michael Brockhoff antwortete auf Arbeiten mit TempTabellen, Rename zum Schluss SQL
Hallo Herr Stark,
danke für den Hinweis!
Werden wir testen
Gruß
Michael Brockhoff
danke für den Hinweis!
Werden wir testen
Gruß
Michael Brockhoff
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.269 Sekunden