Announcement

Collapse
No announcement yet.

Convertierungsproblem!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Convertierungsproblem!

    ich erstelle eine tabelle

    CREATE TABLE hextest(test varchar);


    Füge Hexwerte ein dann sieht die tabele so aus::


    0x4D5A9000030000000400.....

    Jetzt möchte ich die Tabelle Convertieren mit diesem Command:

    select convert(int, test) from hextest;

    Nun Kommt folgende Fehlermeldung::

    dissallowed impclicit conversion form data type varchar to data type varbinary, table master.dbo.hextest, column 'name'. Use the Convert funktion to run this query


    Wäre nett wenn einer eine Lösung wüsste!
    Vielen Dank!

  • #2
    Hallo,

    Leider ist es nicht ganz so einfach, waere aber schoen gewesen ;-)

    Vielleicht hilft dir dieser Link weiter:
    http://digitalcolony.com/2007/06/con...er-in-sql.aspx
    *-- robert.oh. --*

    Comment


    • #3
      hallo

      also das problem ist ich will ja die tabelle convertieren also dass nachher in der tabelle der code geändert wurde^^ aber bei der funktion da muss ich ja den hexcode direkt hinter der procedure als syntax angeben oder? Ich krieg zwar resultset dass alles geklappt hat aber nachher steht genau das gleiche in der tabelle!

      Comment


      • #4
        Wie machst du denn das Update? Der Befehl sollte etwa so aussehen:

        update tabelle set intFeld = dbo.udfHex2Int(hexFeld)

        bye,
        Helmut

        Comment


        • #5
          Danke!

          Hallo vielen dank also geht jetzt zumindest mal besser jetzt kommt TEXT not compatible with int.

          Ich hab meine Tabelle so erstellt:

          CREATE TABLE hextest(TEST TEXT);

          An dem wirds wahrscheinlich liegen dass ich ne Text tabelle erstellt habe!
          Wie kann ich eine tabellenart erstellen wo ich dann auch convertieren kann?

          Danke!

          Comment


          • #6
            Wieso definierst du ein TEXT-Feld? du willst doch einen Integer-Wert reinschreiben, oder nicht?
            Und TEXT entspricht eher dem Datentyp BINARY als VARCHAR, also nicht den Fehler machen und denken, ich nehme einfach immer TEXT und habe dann keine Begrenzung auf max. 8000 Zeichen wie bei VARCHAR. Das hat viele unangenehme Nebenwirkungen! Versuche TEXT so gut wie möglich zu vermeiden - ab SQL2005 gibt es deswegen auch den Datentyp VARCHAR(MAX), der ist optimal für grosse Strings.

            bye,
            Helmut

            Comment


            • #7
              Danke

              Vielen Dank erstmal!

              Ich habe nun die tabelle so erstellt:

              CREATE TABLE hextest (test VARCHAR);

              wenn ich nun emine hexwerte einfüge kommt

              Sting or binary data would be truncated



              Was heißt das ?
              Geht das nun oder nicht?

              Comment


              • #8
                Wenn du den CREATE-Befehl genauso geschrieben hast wie hier angegeben, wundert es mich nicht. Das Wort "truncate" in der Fehlermeldung deutet ja wohl darauf hin, dass das Feld zu klein dimensioniert ist. Hausaufgabe: schaue mal im Manual nach was der SQL-Server annimmt, wenn die Grösse bei varchar nicht explizit definiert wird ...

                bye,
                Helmut

                Comment


                • #9
                  DAnke!

                  Danke nochmal!

                  Aber wenn ich auch nur 2 zeichen in die tabelle einfügen will dann kommt auch schon das mit truncated!
                  Kannst du mir noch den genauen Befehl posten für die tabelle?
                  Wenn ich ihn so eingebe

                  CREATE TABLE hextest (test VARCHAR(MAX))

                  Kommt: incorrect Syntax near 'MAX'


                  Danke!

                  Comment


                  • #10
                    varchar(MAX) gibt es erst seit der letzten Version. Wenn du also einen SQL-Server kleiner 2005 hast, geht das noch nicht. Probiere es doch mal mit varchar(2000) ...

                    bye,
                    Helmut

                    Comment


                    • #11
                      DAnke

                      Hey danke nochmal! Ist echt super dass du mir ein bisschen unter die Arme greifst!

                      Also ich kann tabellen ohne max bis maximal 8000 erstellen!

                      Ich habe jetzt mal eine erstellt und mein hexcode rein.
                      Jetzt habe ich mit der procedure converted es kommt auch dass es ginge aber wenn ich jetzt
                      select *from hextest
                      dann zeigt es mir eine werte an es bleibt also leer das feld!
                      Ist das normal?

                      -->danke!

                      Comment


                      • #12
                        Sorry Matthias, aber wenn du es jetzt mit all den Angaben noch immer nicht selber schaffst, dann fehlen dir grundlegende Kenntnisse. Und die musst du dir schon selber aneignen. Bei der Fehlerbeschreibung ist ja alles möglich.

                        bye,
                        Helmut

                        PS: falls du deutschsprachig geboren bist, würde ich dir auch einen Deutschkurs empfehlen.

                        Comment


                        • #13
                          Hallo

                          Was soll ich denn hierzu sagen?
                          Ich mache grade mein Abi zu ende und mir ist es eigentlich egal ob ich hier im Forum ein paar Rechtschreibfehler drinnen habe oder nicht!
                          Normal stört es auch keinen bis auf dich jetzt!
                          Und JA ich habe keine gute Erfahrung in Sachen SQL!
                          Sonst würde ich mich hier im Forum melden oder?
                          Also an alle anderen die keinen Wert auf perfekte Rechtschreibung in einem Forum legen :-) Kann mir jemand sagen warum die Tabele dann lötzlich leer zu sein scheint?

                          Danke!

                          Comment


                          • #14
                            Hallo!

                            >dann zeigt es mir eine werte an es bleibt also leer das feld!
                            Äh was mag es bedeuten?!?

                            Poste mal
                            1. Das Create Statement der Tabelle
                            2. Ein paar insert Statements
                            3. Dein Update Statement

                            Dann kann man das leichter nachvollziehen.

                            BYE BERND

                            Comment


                            • #15
                              Hallo!

                              Danke erstmal dass du mir helfen willst!

                              create table statement:

                              CREATE TABLE hextest (test VARCHAR(MAX));

                              Insert Befehl:

                              insert into hextest VALUES ('0x4D5A90000300000004000000FFFF0000B8000000000000 004000000000')

                              Procedure statement:

                              CREATE FUNCTION dbo.udfHex2Int
                              (
                              @hexstr AS varchar(1000)
                              )
                              -- Function converts VARCHAR representation of HEX to INT
                              -- 'FF' --> 255

                              RETURNS INT
                              AS
                              BEGIN

                              IF @hexstr IS NULL RETURN NULL

                              DECLARE
                              @curbyte AS int,
                              @varbin AS varbinary(500)

                              IF @hexstr LIKE '0x%' SET @hexstr = SUBSTRING(@hexstr, 3, 8000)

                              SET @hexstr =
                              CASE LEN(@hexstr) % 2 WHEN 1 THEN '0' ELSE '' END + @hexstr

                              SET @varbin = 0x
                              SET @curbyte = LEN(@hexstr) / 2

                              WHILE @curbyte > 0
                              BEGIN
                              SET @varbin =
                              CAST(
                              CASE SUBSTRING(@hexstr, @curbyte * 2, 1)
                              WHEN '0' THEN 0x00
                              WHEN '1' THEN 0x01
                              WHEN '2' THEN 0x02
                              WHEN '3' THEN 0x03
                              WHEN '4' THEN 0x04
                              WHEN '5' THEN 0x05
                              WHEN '6' THEN 0x06
                              WHEN '7' THEN 0x07
                              WHEN '8' THEN 0x08
                              WHEN '9' THEN 0x09
                              WHEN 'A' THEN 0x0A
                              WHEN 'B' THEN 0x0B
                              WHEN 'C' THEN 0x0C
                              WHEN 'D' THEN 0x0D
                              WHEN 'E' THEN 0x0E
                              WHEN 'F' THEN 0x0F
                              END |
                              CAST(
                              CASE SUBSTRING(@hexstr, @curbyte * 2 - 1, 1)
                              WHEN '0' THEN 0x00
                              WHEN '1' THEN 0x10
                              WHEN '2' THEN 0x20
                              WHEN '3' THEN 0x30
                              WHEN '4' THEN 0x40
                              WHEN '5' THEN 0x50
                              WHEN '6' THEN 0x60
                              WHEN '7' THEN 0x70
                              WHEN '8' THEN 0x80
                              WHEN '9' THEN 0x90
                              WHEN 'A' THEN 0xA0
                              WHEN 'B' THEN 0xB0
                              WHEN 'C' THEN 0xC0
                              WHEN 'D' THEN 0xD0
                              WHEN 'E' THEN 0xE0
                              WHEN 'F' THEN 0xF0
                              END AS tinyint) AS binary(1))
                              + @varbin
                              SET @curbyte = @curbyte - 1
                              END

                              RETURN CAST(@varbin AS INT)

                              END

                              Update statement:
                              update hextest set name = dbo.udfHex2Int(test)


                              hoffe du kannst mir helfen Danke!

                              Comment

                              Working...
                              X