Datentypkonvertierungen

CHAR und VARCHAR

Basierend auf der Länge der Quelldaten konvertiert der DRDA-Dienst von dieser Quelle DB2 in diese SQL Server-Zieldatentypen.

  • CHAR () FOR BIT greater than 8K is mapped to VARBINARY(MAX).

  • CHAR () größer als 8K wird VARCHAR(MAX) zugeordnet.

ZEICHEN|VARCHAR () FÜR BIT

Abhängig von der Quellpaketdefinition und den Bindungsoptionen für Kopieroptionen, SQL-Befehle mit Parametern vom Typ CHAR|VARCHAR () FOR BIT kann im DRDA BGNBND BNDSQLSTT als CHAR codiert werden|VARCHAR (CCSID=37, 277, 1208) und nicht als CHAR|VARCHAR (65535) oder CHAR|VARCHAR ( ) FÜR BIT oder BINARY|VARBINARY. Dieses Problem mit der Codierung des Parameterdatentyps kann dazu führen, dass die Bindungskopie an den CREATE PROCEDURE-Prozess fehlschlägt, wenn die ZIEL-SQL Server-Spalten BINÄR sind|VARBINARY. Um dieses Problem zu beheben, erfasst MsDrdaService automatisch den CREATE DRDA BNDSQLSTT zu SQL Server CREATE PROCEDURE-Fehler, ruft Spaltenmetadaten aus dem SQL Server-Katalog ab, mit dem die Datentypen der gespeicherten Prozedurparameter korrigiert werden, und führen Sie dann die CREATE PROCEDURE-Anweisung erneut aus.

VARCHAR-Spalten werden CHAR-Parametern zugeordnet

Der DRDA-Dienst verarbeitet DRDA BNDSQLSTT (Bind SQL Statement)-Befehle in SQL Server CREATE PROCEDURE-Anweisungen und transformiert die DB2 DRDA-Datentypen in entsprechende SQL Server T-SQL-Datentypen. Das DRDA BNDSQLSTT definiert CHAR-Parametertypen zum Lesen und Schreiben in DB2- und SQL Server VARCHAR-Spaltendatentypen. Siehe z.B. das STATISCHE SQL-Paket DSN8HC91 für das Beispielprogramm DB2 für z/OS IVT (Installation Verification Test). DSN8HC3 und entsprechende SQL Server- und DB2-Tabellen.

CREATE TABLE DEPT (  
DEPTNO CHAR(3) NOT NULL,  
DEPTNAME VARCHAR(36) NOT NULL,  
MGRNO CHAR(6) WITH DEFAULT NULL,  
ADMRDEPT CHAR(3) NOT NULL,  
LOCATION CHAR(16) WITH DEFAULT NULL  
)  
AUDIT NONE  
DATA CAPTURE NONE   
CCSID EBCDIC;  
  

Beispiel für DB2 CREATE TABLE-Anweisung.

  
CREATE TABLE [DSN8910].[DEPT]([DEPTNO] [char](3) NOT NULL,  
[DEPTNAME] [varchar](36) NOT NULL,  
[MGRNO] [char](6) NULL,  
[ADMRDEPT] [char](3) NOT NULL,  
[LOCATION] [char](16) NULL) ON [PRIMARY]  
  

Beispiel für SQL Server CREATE TABLE-Anweisung.

UPDATE VHDEPT SET DEPTNAME = :H, MGRNO = :H, ADMRDEPT = :H, LOCATION = :H WHERE DEPTNO = :H  

Beispiel für eingebettete statische SQL-AnweisungDB2.

  
CREATE PROCEDURE [DSN8910].[DSN8HC3_18BBB2BA1492DAC8_24]  
    @P0 char(36)   
   ,@P1 char(6)   
   ,@P2 char(3)   
   ,@P3 char(16)   
   ,@P4 char(36)   
AS  
UPDATE VHDEPT  
SET    DEPTNAME = @P0,  
       MGRNO    = @P1,  
       ADMRDEPT = @P2,  
       LOCATION = @P3  
WHERE  DEPTNO = @P4;  
  
RETURN @@ROWCOUNT;  
  

Beispiel für SQL Server CREATE PROCEDURE-Anweisung.

BLOB und CLOB

MsDrdaService-Unterstützung für DB2 BLOB und CLOB ist eingeschränkt. MsDrdaService unterstützt den DB2 BLOB-Datentyp, der SQL Server VARBINARY(MAX) zugeordnet ist, mit einer optionalen Zuordnung zu IMAGE. MsDrdaService unterstützt den DB2 CLOB-Datentyp, der SQL Server VARCHAR(MAX) zugeordnet ist, mit optionalen Zuordnungen zu TEXT und NTEXT.

Dynamisches SQL-BLOB und CLOB

  • BLOB in und von IMAGE

  • BLOB zu und von VARBINARY(MAX)

  • CLOB in und von TEXT

  • CLOB in und von NTEXT

  • CLOB zu und von VARCHAR(MAX)

    Statisches SQL-BLOB und CLOB funktionieren auf begrenzte Weise mit diesen Datentypzuordnungen.

  • Eingabeparameter

    • BLOB zu VARBINARY(MAX)

    • CLOB zu VARCHAR(MAX)

  • Ausgabeparameter

    • BLOB zu VARBINARY(MAX)

    • CLOB zu VARCHAR(MAX)

    • CLOB in TEXT

    • CLOB zu NTEXT

    Microsoft empfiehlt, die Standarddatentypzuordnungen zu verwenden.

    ntext-, Text- und Bilddatentypen werden in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie die Verwendung dieser Datentypen bei neuen Entwicklungen, und planen Sie die Änderung von Anwendungen, in denen sie aktuell verwendet werden. Verwenden Sie stattdessen nvarchar(max), varchar(max) und varbinary(max).

    Datentypen fester und variabler Länge zum Speichern von großen Nicht-Unicode- und Unicode-Zeichendaten sowie Binärdaten. Unicode-Daten verwenden den UNICODE UCS-2-Zeichensatz.

    Siehe ntext, Text und Bild (Transact-SQL).