2009-08-07 4 views
0

J'ai besoin d'utiliser une donnée binaire dans une transformation comme un nombre entier et de faire une manipulation, mais comment faire le casting? J'ai essayé plusieurs types de données SSIS mais pas de chance. En passant, je ne veux pas utiliser la tâche de script.Comment faire pour CAST SQL Server type varbinary à entier dans SSIS?


[section Mise à jour ci-dessous]

Les données sont les valeurs stockées dans la colonne update_mask __ de $ des fn_cdc_get_net_changes de fonction CDC. A la suite est le CAST je tente dans SSIS,

(__$operation == 4) && (((DT_I8)__$update_mask & @[User::SCDColumnNumber]) > 0) 

Le code TSQL correspondant sera

SELECT 
CASE WHEN (CAST(__$update_mask as int) & 16)>0 THEN 1 ELSE 0 END ScdType2, 
CAST(__$update_mask as int) Change, 
* FROM 
cdc.fn_cdc_get_net_changes_dbo_Transactions 
(sys.fn_cdc_get_min_lsn('dbo_Transactions') 
,sys.fn_cdc_get_max_lsn(),'all with mask') 

qui fonctionne très bien. Mais le SSIS CAST ne l'est pas. J'espère que cela donne assez d'informations sur ma requête.

+0

Quel est le symptôme? Que voulez-vous dire quand vous dites que ça ne marche pas? –

+0

La CAST échoue pour la plupart des types de données SSIS que j'ai essayés. – Faiz

Répondre

0

La colonne __ $ update_mask est de type varbinary, longueur 128 octets. Il n'est pas possible de le convertir (sans perte d'information) en INT ou en BIGINT car les tailles de destination de cast sont respectivement de 4 et 8 octets. Bien que je voulais considérer seulement les 8 premiers octets des 128 octets. Mais encore une fois, je n'ai trouvé aucun type de données supporté ou de casting dans SSIS capable de faire le travail. Bien que cela puisse être fait dans le moteur de DB et apporté à SSIS plus tard.

Questions connexes