Hallo,
ich möchte gerne eine Prozedur schreiben,
die aus einer "Textzahl" mit Leerzeichen (Beispiel " 123,45 ")
eine "Textzahl" mit fester Breite macht (Beispiel "00123,5").
Der Prozedur soll die Anzahl der Zeichen und die Anzahl der Nachkommastellen
mitgegeben werden.
Wenn ich die unten aufgeführte Script mit fester Vorgabe von
Länge und Anzahl der Nachkommastellen ausführe,
erhalte ich das gewünschte Ergebnis.
Verwende ich variable Version, erhalte ich einen Fehler.
Der Fehler entsteht,
wenn die Variable @sql mit EXECUTE ausgeführt wird,
Anstelle einer "starren" SQL Anweisung.
Hat jemand eine Idee, wie ich das Problem Lösen kann?
Gruss
Carsten
--------------------------------------------------------------------------------
gewünschtes Ergebnis
123.45 Textzahl unformatiert
123.45 Leerzeichen links entfernt
123.45 Leerzeichen rechts entfernt
7 Länge
1 NachKomma
SQL EXECUTE Anweisung
IF cast(@ZahlUnformatiert as decimal(7,1)) > 0 set @ZahlFormatiert = cast(@ZahlUnformatiert as decimal(7,1))
5 -> Anzahl der Zeichen vor der Scheife
6 -> Anzahl der Zeichen während der Scheife
7 -> Anzahl der Zeichen während der Scheife
00123.5 Zahl formatiert
--------------------------------------------------------------------------------
fehlerhaftes Ergebnis
123.45 Textzahl unformatiert
123.45 Leerzeichen links entfernt
123.45 Leerzeichen rechts entfernt
7 Länge
1 NachKomma
SQL EXECUTE Anweisung
IF cast(@ZahlUnformatiert as decimal(7,1)) > 0 set @ZahlFormatiert = cast(@ZahlUnformatiert as decimal(7,1))
Server: Nachr.-Nr. 137, Schweregrad 15, Status 2, Zeile 1
Die Variable '@ZahlUnformatiert' muss deklariert werden.
Server: Nachr.-Nr. 137, Schweregrad 15, Status 1, Zeile 1
Die Variable '@ZahlUnformatiert' muss deklariert werden.
0 -> Anzahl der Zeichen vor der Scheife
1 -> Anzahl der Zeichen während der Scheife
2 -> Anzahl der Zeichen während der Scheife
3 -> Anzahl der Zeichen während der Scheife
4 -> Anzahl der Zeichen während der Scheife
5 -> Anzahl der Zeichen während der Scheife
6 -> Anzahl der Zeichen während der Scheife
7 -> Anzahl der Zeichen während der Scheife
0000000 Zahl formatiert
--------------------------------------------------------------------------------
Script
DECLARE @ZahlUnformatiert nvarchar(255)
DECLARE @Laenge nvarchar(2)
DECLARE @NachKomma nvarchar(1)
DECLARE @ZahlFormatiert nvarchar(15)
DECLARE @AnzahlZeichen int
DECLARE @SQL nvarchar(255)
set @sql = ''
set @ZahlUnformatiert = ' 123.45 '
set @ZahlFormatiert = ''
set @Laenge = '7';
set @NachKomma= '1';
print @ZahlUnformatiert + ' Textzahl unformatiert';
set @ZahlUnformatiert = ltrim (@ZahlUnformatiert)
print @ZahlUnformatiert + ' Leerzeichen links entfernt'
set @ZahlUnformatiert = rtrim (@ZahlUnformatiert)
print @ZahlUnformatiert + ' Leerzeichen rechts entfernt'
print ''
print @Laenge + ' Länge ' ;
print @NachKomma + ' NachKomma ';
print ''
set @sql =
'IF cast(@ZahlUnformatiert as ' +
'decimal(' + @Laenge + ',' + @NachKomma + ')) > 0 ' +
'set @ZahlFormatiert = cast(' +
'@ZahlUnformatiert as decimal(' + @Laenge + ',' + @NachKomma + '))'
--IF cast(@ZahlUnformatiert as decimal(7,1)) > 0 set @ZahlFormatiert = cast(@ZahlUnformatiert as decimal(7,1))
print ''
print 'SQL EXECUTE Anweisung'
print @sql
execute (@sql) ;
SET @AnzahlZeichen = len(@ZahlFormatiert)
print ''
print cast(@AnzahlZeichen as nvarchar(15)) + ' -> Anzahl der Zeichen vor der Scheife'
print ''
SET @AnzahlZeichen = len(@ZahlFormatiert);
WHILE (@AnzahlZeichen < @Laenge)
BEGIN
SET @ZahlFormatiert = '0' + @ZahlFormatiert
SET @AnzahlZeichen = @AnzahlZeichen + 1
print cast(@AnzahlZeichen as nvarchar(15)) + ' -> Anzahl der Zeichen während der Scheife'
END
print ''
print @ZahlFormatiert + ' Zahl formatiert'
ich möchte gerne eine Prozedur schreiben,
die aus einer "Textzahl" mit Leerzeichen (Beispiel " 123,45 ")
eine "Textzahl" mit fester Breite macht (Beispiel "00123,5").
Der Prozedur soll die Anzahl der Zeichen und die Anzahl der Nachkommastellen
mitgegeben werden.
Wenn ich die unten aufgeführte Script mit fester Vorgabe von
Länge und Anzahl der Nachkommastellen ausführe,
erhalte ich das gewünschte Ergebnis.
Verwende ich variable Version, erhalte ich einen Fehler.
Der Fehler entsteht,
wenn die Variable @sql mit EXECUTE ausgeführt wird,
Anstelle einer "starren" SQL Anweisung.
Hat jemand eine Idee, wie ich das Problem Lösen kann?
Gruss
Carsten
--------------------------------------------------------------------------------
gewünschtes Ergebnis
123.45 Textzahl unformatiert
123.45 Leerzeichen links entfernt
123.45 Leerzeichen rechts entfernt
7 Länge
1 NachKomma
SQL EXECUTE Anweisung
IF cast(@ZahlUnformatiert as decimal(7,1)) > 0 set @ZahlFormatiert = cast(@ZahlUnformatiert as decimal(7,1))
5 -> Anzahl der Zeichen vor der Scheife
6 -> Anzahl der Zeichen während der Scheife
7 -> Anzahl der Zeichen während der Scheife
00123.5 Zahl formatiert
--------------------------------------------------------------------------------
fehlerhaftes Ergebnis
123.45 Textzahl unformatiert
123.45 Leerzeichen links entfernt
123.45 Leerzeichen rechts entfernt
7 Länge
1 NachKomma
SQL EXECUTE Anweisung
IF cast(@ZahlUnformatiert as decimal(7,1)) > 0 set @ZahlFormatiert = cast(@ZahlUnformatiert as decimal(7,1))
Server: Nachr.-Nr. 137, Schweregrad 15, Status 2, Zeile 1
Die Variable '@ZahlUnformatiert' muss deklariert werden.
Server: Nachr.-Nr. 137, Schweregrad 15, Status 1, Zeile 1
Die Variable '@ZahlUnformatiert' muss deklariert werden.
0 -> Anzahl der Zeichen vor der Scheife
1 -> Anzahl der Zeichen während der Scheife
2 -> Anzahl der Zeichen während der Scheife
3 -> Anzahl der Zeichen während der Scheife
4 -> Anzahl der Zeichen während der Scheife
5 -> Anzahl der Zeichen während der Scheife
6 -> Anzahl der Zeichen während der Scheife
7 -> Anzahl der Zeichen während der Scheife
0000000 Zahl formatiert
--------------------------------------------------------------------------------
Script
DECLARE @ZahlUnformatiert nvarchar(255)
DECLARE @Laenge nvarchar(2)
DECLARE @NachKomma nvarchar(1)
DECLARE @ZahlFormatiert nvarchar(15)
DECLARE @AnzahlZeichen int
DECLARE @SQL nvarchar(255)
set @sql = ''
set @ZahlUnformatiert = ' 123.45 '
set @ZahlFormatiert = ''
set @Laenge = '7';
set @NachKomma= '1';
print @ZahlUnformatiert + ' Textzahl unformatiert';
set @ZahlUnformatiert = ltrim (@ZahlUnformatiert)
print @ZahlUnformatiert + ' Leerzeichen links entfernt'
set @ZahlUnformatiert = rtrim (@ZahlUnformatiert)
print @ZahlUnformatiert + ' Leerzeichen rechts entfernt'
print ''
print @Laenge + ' Länge ' ;
print @NachKomma + ' NachKomma ';
print ''
set @sql =
'IF cast(@ZahlUnformatiert as ' +
'decimal(' + @Laenge + ',' + @NachKomma + ')) > 0 ' +
'set @ZahlFormatiert = cast(' +
'@ZahlUnformatiert as decimal(' + @Laenge + ',' + @NachKomma + '))'
--IF cast(@ZahlUnformatiert as decimal(7,1)) > 0 set @ZahlFormatiert = cast(@ZahlUnformatiert as decimal(7,1))
print ''
print 'SQL EXECUTE Anweisung'
print @sql
execute (@sql) ;
SET @AnzahlZeichen = len(@ZahlFormatiert)
print ''
print cast(@AnzahlZeichen as nvarchar(15)) + ' -> Anzahl der Zeichen vor der Scheife'
print ''
SET @AnzahlZeichen = len(@ZahlFormatiert);
WHILE (@AnzahlZeichen < @Laenge)
BEGIN
SET @ZahlFormatiert = '0' + @ZahlFormatiert
SET @AnzahlZeichen = @AnzahlZeichen + 1
print cast(@AnzahlZeichen as nvarchar(15)) + ' -> Anzahl der Zeichen während der Scheife'
END
print ''
print @ZahlFormatiert + ' Zahl formatiert'
Comment