trigger i problem z konwersją trn_data2

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

m.bozenski
Posty: 99
Rejestracja: 06 wrz 2009, 15:17
Rola: Administrator CDN XL
Wersja: 10

trigger i problem z konwersją trn_data2

Post autor: m.bozenski »

Witam,

mam problem z konwersją pola trn_data2 na bardziej przyjazny format wewnątrz triggera.

podczas użycia convert(varchar(10), dateadd(dd, trn_data2, '1800-12-28'), 121) XL zwraca coś takiego w momencie wywołania triggera:

Kod: Zaznacz cały

błąd 120

Szczegóły operacji:
Operacja zmiany obiektu TraNag o identyfikatorze (2033:579329:66250:0).
Identyfikator operacji: Zapisz_TraNag-14.
Błąd: Konwersja typu danych varchar na typ danych datetime spowodowała utworzenie wartości leżącej poza zakresem. (22008), Konwersja typu danych varchar na typ danych datetime spowodowała utworzenie wartości leżącej poza zakresem..
sprawdziłem i błąd pojawia się zawsze podczas konwersji pól zapisanych w formacie clarionowym (trp_termin i inne).

ktoś coś może poradzić z tym fantem?

cały trigger poniżej. xl w wersji 2014.6.3, mssql 2012

Kod: Zaznacz cały

USE [XXX]
GO
/****** Object:  Trigger [CDN].[XXXX]    Script Date: 2014-01-21 20:47:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER TRIGGER [CDN].[XXXXXX]
ON [CDN].[TraNag]
FOR UPDATE, INSERT
AS 
BEGIN
SET NOCOUNT ON;

	IF UPDATE(TrN_Stan)
	BEGIN
		-- deklaracja zmiennych do maila
		DECLARE @RaportHTML varchar(max)
		DECLARE @temat varchar(max)
		SET @RaportHTML = ''

		-- deklaracja zmiennych potrzebnych do ustalenia
		-- czy trigger powinien zadziałać

		DECLARE @trn_gidnumer int
		DECLARE @trn_gidtyp int
		DECLARE @sposob_dostawy varchar(255)
		DECLARE @knt_gidnumer int
		DECLARE @trn_stan int
		DECLARE @knt_docelowy int
		DECLARE @aktualny_stan int
		DECLARE @ilosc int
		DECLARE @ilosc_spietych int
		DECLARE @spinacz int
		DECLARE @kurier varchar(255)
		DECLARE @numer_listu varchar(255)
		DECLARE @data_sprzedazy VARCHAR(10)
		DECLARE @termin_platnosci VARCHAR(10)
		DECLARE @nr_faktury VARCHAR(50)
		DECLARE @akronim_kontrahenta VARCHAR(255)
		DECLARE @nazwa_kontrahenta VARCHAR(255)
		DECLARE @netto decimal(10,2)
		DECLARE @brutto decimal(10,2)
		DECLARE @forma_platnosci VARCHAR(100)
		DECLARE @trn_data2 int

		SELECT
			@trn_gidnumer = trn_gidnumer,
			@sposob_dostawy = trn_sposobdostawy,
			@knt_gidnumer = trn_kntnumer,
			@trn_stan = trn_stan,
			@trn_gidtyp = trn_gidtyp,
			@knt_docelowy = trn_kndnumer,
			@trn_data2 = trn_data2
		FROM
			inserted

		if @sposob_dostawy <> 'x' AND @sposob_dostawy <> ''
		begin
			SET @RaportHTML = @RaportHTML + 'Wejście 1'

			if @trn_stan in (0, 1, 2, 3) and @trn_gidtyp in (2033, 2034, 2037)
			begin
				SET @RaportHTML = ' Wejście 2'

				SELECT @aktualny_stan = trn_stan FROM CDN.TraNag WHERE trn_gidnumer = @trn_gidnumer

				if @aktualny_stan = 3
				begin
					SET @RaportHTML = ' Wejście 3'

					SELECT @ilosc_spietych = COUNT(*) FROM CDN.TraNag WHERE Trn_spinumer = @trn_gidnumer

					if @ilosc_spietych > 0
					begin
						-- spinacz
						SELECT @spinacz = trn_gidnumer FROM CDN.TraNag WHERE TrN_SpiNumer = @trn_gidnumer
					end
					else
					begin
						-- brak spinacza
						SELECT @spinacz = trn_gidnumer FROM CDN.TraNag WHERE Trn_gidnumer = @trn_gidnumer
					end
						
					SELECT @ilosc = COUNT(*) from cdn.traelem
					WHERE tre_gidnumer = @spinacz
					AND cdn.bgrupatwrpien(TrE_TwrNumer) = 4632

					IF @ilosc > 0
					BEGIN
						SET @RaportHTML = 'Wejście 4'

						-- ustawiamy temat wiadomości e-mail
						SELECT 
							@kurier = Atr_Wartosc 
						from cdn.TraNag a JOIN cdn.atrybuty b ON a.trn_gidnumer = b.atr_obinumer 
						WHERE 
							TrN_KntNumer = @knt_gidnumer 
							AND Atr_AtkId = 8 
							AND TrN_GIDNumer = @trn_gidnumer
						
						-- pobierz informacje o numerze listu przewozowego
						SELECT 
							@numer_listu = Atr_Wartosc 
						from 
							cdn.tranag a JOIN cdn.atrybuty b ON a.trn_gidnumer = b.atr_obinumer 
						WHERE 
							TrN_KntNumer = @knt_gidnumer 
							AND Atr_AtkId = 7 
							AND TrN_GIDNumer = @trn_gidnumer

						SELECT
							@nr_faktury = TrN_DokumentObcy 
						from 
							cdn.tranag 
						WHERE 
							TrN_GIDNumer = @trn_gidnumer
							
						SELECT 
							@akronim_kontrahenta = knt_akronim 
						from 
							cdn.tranag, cdn.kntkarty 
						WHERE 
							TrN_GIDNumer = @trn_gidnumer 
							AND knt_gidnumer = TrN_KntNumer
							
						SELECT 
							@nazwa_kontrahenta = Knt_Nazwa1 
						from 
							cdn.tranag, cdn.kntkarty 
						WHERE 
							TrN_GIDNumer = @trn_gidnumer 
							AND knt_gidnumer = TrN_KntNumer

						SELECT 
							@netto = TrN_NettoR 
						from 
							cdn.tranag 
						WHERE 
							TrN_GIDNumer = @trn_gidnumer
						SELECT 
							@brutto = TrN_NettoR*1.23 
						from 
							cdn.tranag 
						WHERE 
							TrN_GIDNumer = @trn_gidnumer
							
						SELECT
							@data_sprzedazy = convert(varchar(10), dateadd(dd, @trn_data2, '1800-12-28'), 121)

						
														
						SELECT 
							@forma_platnosci = TrN_FormaNazwa 
						from 
							cdn.tranag 
						WHERE 
							TrN_GIDNumer = @trn_gidnumer
							
						SET @temat = 'Powiadomienie o wystawieniu faktury nr '+ @nr_faktury

						SET @RaportHTML = ''
						SET @RaportHTML = @RaportHTML + 'Numer dokumentu: <strong>' + @nr_faktury + '</strong><br />'
						SET @RaportHTML = @RaportHTML + 'Akronim kontrahenta: <strong>' + @akronim_kontrahenta + '</strong><br />'
						SET @RaportHTML = @RaportHTML + 'Nazwa kontrahenta: <strong>' + @nazwa_kontrahenta + '</strong><br />'
						SET @RaportHTML = @RaportHTML + 'Kwota netto: <strong>' + CONVERT(VARCHAR, @netto) + '</strong><br />'
						SET @RaportHTML = @RaportHTML + 'Kwota brutto: <strong>' + CONVERT(VARCHAR, @brutto) + '</strong><br />'
						SET @RaportHTML = @RaportHTML + 'Data wystawienia: <strong>' + CONVERT(VARCHAR, @data_sprzedazy) + '</strong><br />'
						SET @RaportHTML = @RaportHTML + 'Forma płatności: <strong>' + @forma_platnosci + '</strong><br />'
						--SET @RaportHTML = @RaportHTML + 'Termin płatności: <strong>' + @termin_platnosci + '</strong><br />'

						-- wysyłka powiadomienia
						EXEC msdb.dbo.sp_send_dbmail
						@profile_name = 'test',
						@recipients = 'costam@xyz.pl',
						@subject = @temat,
						@body = @RaportHTML,
						@body_format = 'HTML'

					END
				end
			end
		end
	END
END
Awatar użytkownika
wacek
Posty: 714
Rejestracja: 27 paź 2008, 18:04
Rola: Administrator CDN XL
Lokalizacja: Łódzkie

Re: trigger i problem z konwersją trn_data2

Post autor: wacek »

Zobacz tak:
CONVERT(CHAR(10), DATEADD(D,TrN_Data2,'18001228'),121)
Pozdrawiam,
Robert

select convert(varchar(100),0x637a6173616d69207069737aea2074752067b375706f7479203a29)
m.bozenski
Posty: 99
Rejestracja: 06 wrz 2009, 15:17
Rola: Administrator CDN XL
Wersja: 10

Re: trigger i problem z konwersją trn_data2

Post autor: m.bozenski »

ooo, dzięki!
taszek
Posty: 609
Rejestracja: 12 wrz 2012, 13:20
Rola: Administrator CDN XL
Wersja: 2016

Re: trigger i problem z konwersją trn_data2

Post autor: taszek »

Witam,

Sprawdzałem konwersję daty w triggerze u mnie działa to bez problemu (SQL Server 2008R2).
Pozdrawiam
Wojtek Cyrklewicz
ODPOWIEDZ