2010-08-26 11 views
-3

Ok, je ne sais pas pourquoi une société de plusieurs milliards de dollars court-circuite les fonctions de tableau pour leurs serveurs SQL phares C'est pourquoi les gens utilisent MySQL. Ok, assez de déclamations. Utilisation de SQL 2005.Comparaison de tableaux en utilisant SQL 2005. Erreur lors de la conversion

Disons que je reçu un tableau par case d'une autre page à l'aide de la méthode querystring:

intTask = request.querystring("task") 

Pour cet exemple, intTask = "1,3,5"

Je utilisé la requête

SELECT user.Task FROM user WHERE (user.Task in (" & intTask & ")) 

Cela donne une erreur de:

Conversion failed when converting the nvarchar value '1, 2' to data type int 

Le tableau dans la colonne User.task ici = 1,2. NVARCHAR est le type de données. intTask est une chaîne. Aucune idée de la raison pour laquelle SQL tente de convertir la colonne en entiers quand elle suppose une comparaison de chaînes. Je connais déjà la vulnérabilité d'injection SQL, qui s'est occupée d'un autre script pour la page.

OK. Comment comparer les tableaux à l'aide de SQl Server 2005? Je n'arrive pas à trouver des fonctions SQL qui vont parcourir 2 chaînes et comparer pour toutes les valeurs correspondantes.

Par exemple

intTask = 1,2 

user.task = 3,5,7,2,9 

En raison des 2 années, je devrais obtenir un recordset parce que le exist de 2 dans les deux tableaux

MISE À JOUR

Y at-il une fonction SQL qui va gérer deux tableaux et parcourez les tableaux pour trouver les éléments correspondants. Quelque chose comme:

intTask = "1,3,5"

utilisateur ("tâche") = "3,5,2"

ARR1 = split (intTask, "")

ARR2 = split (utilisateur ("tâche"), "")

pour i = 0 à UBound (arr1)

for j=0 to UBound(arr2) 

    if(arr1(i) = arr2(j)) then 

     common_found = true 

    end if 

Next 

Suivant

Merci à l'avance

Répondre

4

Le tableau dans la colonne User.task ici = 1,2. NVARCHAR est le type de données.

parce que 1,2 sont 2 entiers et votre colonne est un nvarchar, utilisez '1', '2', vous pourriez avoir besoin de préfixer gagner N

un coup d'oeil à Arrays and Lists in SQL Server 2005 and Beyond

ici est un exemple de code

create table #test (id nvarchar(20)) 
insert #test values('1,2') 
insert #test values('2,3') 
go 

fonctionne

select * from #test 
where id in (N'1,2') 

échouera

select * from #test 
where id in (1,2) 

Msg 245, niveau 16, état 1, ligne 1
La conversion a échoué lors de la conversion de la valeur nvarchar '1,2,3' au type de données int.

Si vous utilisez uniquement des entiers puis utilisez varchar, non nvarchar, nvarchar utilise le double du stockage de varchar ... Bien sûr, si vous correctement normlized Db vous n'auriez pas ces problèmes

+0

+1 - J'ai eu cet article favori avant et perdu, c'est un bon article. – LittleBobbyTables

+0

Veuillez fournir un exemple de l'utilisation du "préfixe win N" dans le code. De préférence, une requête de requête SQL complète. Je vous remercie. – Patriotec

+0

voir le code J'ai ajouté – SQLMenace