2008-12-22 5 views
3
print("select CustomerNo, CustomerName, Address, City, State, Zip, 
    Phone, Fax, ContactName, Email 
    from Customers where CustomerName like '%field%'"); 

Bonjour à tous. C'est une question simple mais je n'étais pas capable de comprendre car je suis assez nouveau pour tsql et sql en général. J'utilise la procédure stockée ci-dessus pour effectuer une recherche. Ma question est pour '% field%'. Quelle variable utilisez-vous ou comment ça marche dans tsql? par exemple, "où Customers = @CustomerNo". que diriez-vous de wildcard? comment passez-vous dans une variable avec wildcard? Je suppose que je peux faire "%" + "champ" + "%" dans le code mais est-il un moyen de ne pas le faire?Procédure stockée Sql Like Variable d'opérateur

Répondre

0

Si vous utilisez =, vous dites "égal", qui n'utilisera pas les caractères génériques.

Si vous utilisez LIKE, qui ne fonctionne que sur les champs de texte, il peut utiliser des caractères génériques.

Il est impossible d'obtenir des correspondances génériques avec =.

Notez que selon les données, une recherche générique peut faire une analyse de table, donc je m'assurerais que c'est ce que vous voulez avant de l'autoriser.

Par exemple, cela va faire une table-scan:

WHERE CustomerID LIKE '%1' 

ie. tous les clients qui ont un identifiant client (qui est un texte) qui se termine par un 1. Cela ne peut pas être résolu avec un index.

Réflexions finales. Je ne suis pas sûr à 100% que je comprends exactement ce que vous demandez. Pourriez-vous s'il vous plaît clarifier. Que voulez-vous dire par "passer dans une variable avec wildcard"?

+0

Bonjour. D'autres ont posté la réponse correspondant à ce dont j'ai besoin. Merci à tous. – Jack

17

Les caractères génériques font simplement partie d'une chaîne littérale, par ex. '% field%' est juste une chaîne.

Vous pouvez concaténer les caractères génériques sur votre chaîne, puis utilisez la chaîne:

@Pattern = '%' + @CustomerName + '%'; 

...WHERE CustomerName LIKE @Pattern 

Ou bien vous pouvez écrire une expression dans le SQL impliquant concaténation:

WHERE CustomerName LIKE '%' + @CustomerName + '%' 

Il n'y a pas d'autre solution magique pour ça.

+0

devinez que vous vouliez dire: LIKE @Pattern – devio

+0

Merci. Je crois que c'est ce que je cherche. – Jack

+0

@devio: Oui, merci. Je l'ai réparé ci-dessus. –

2

C'est très simple. "=" et "J'aime" sont les deux opérateurs. Ce que vous pouvez faire après celui que vous pouvez faire après l'autre.

Donc, si en C# et l'aide d'appels SQLClient, vous pouvez dire:

string value; 
... 
value = "Some name"; 
... 
myCommand.CommandText = "Select...from Customers Where CustomerName Like @Var"; 
myCommand.Parameters.AddWithValue("@Var", "%" + value + "%"); 
myCommand.ExecuteNonQuery(); 
Questions connexes