2008-11-10 7 views
1

Dans une base de données, j'ai une chaîne contenant "default". Je veux juste le remplacer par défaut avec 0. J'ai quelque chose comme:Évitez d'entrer des guillemets à partir du début et de la fin d'une chaîne

select * from tblname where test = 'default' 

Je ne veux pas les guillemets dans le remplacement de « défaut ».

Je veux

select * from tblname where test = 0 

est-il possible de le faire?

+0

Pouvez-vous pas changer juste la façon dont vous avez fait preuve? –

+0

s'il vous plaît dites-nous quel langage de programmation/système et quel système de base de données que vous utilisez. – splattne

+0

Vous n'êtes pas sûr que le ré-étiquetage soit correct?Il était après l'aide de C# initialement alors peut-être nous avons besoin d'expliquer les périls de SQL généré ne pas re-tagger à SQL? –

Répondre

0

Je pense que vous seriez mieux utiliser des chaînes de format

string myVar = "0"; 
string sql = String.Format(@"select * from tblname where test = \"{0}\"", myVar); 

Vous devriez aussi vous demander pourquoi vous êtes la génération SQL en ligne à la volée et de ne pas utiliser les procédures stockées car cela est de savoir comment les attaques par injection SQL peuvent se produire à moins que vous assainir l'entrée.

+0

Depuis le re-marquage de ce sujet semble loin, mais je suis assez sûr que c'était le point de la question initiale. Les mérites de la question originale devraient être discutés, pas en éditant le post et en supposant ce que l'affiche originale signifiait ou voulait. –

4

Je suppose que le champ test est d'un type de texte (varchar, char ou similaire).

Premièrement: Mettez à jour le tableau pour qu'il contienne '0' lorsqu'il contient 'default'.

UPDATE tblname SET test = '0' WHERE test = 'default' 

Ensuite: Sélectionnez toutes les lignes avec '0' dedans. Vous ne pouvez pas laisser de côté les guillemets, car ils font partie de la syntaxe SQL.

SELECT * FROM tblname WHERE test = '0' 

Pour pouvoir s'arrêter les guillemets, vous devez activer le champ en un numérique (int, float ou similaire).

+0

Même après avoir lu votre réponse, il m'a fallu un certain temps pour comprendre la question. Bon travail. – Tom

0

Il existe un certain nombre de choses que vous pouvez faire pour effectuer un simple remplacement de chaîne; cependant, je vous suggère fortement de vous pencher sur le paramétrage pour assurer la sécurité des injections et la réutilisation des plans de requête.

Les paramètres bénéficient également en évitant le problème de devis - il suffit donc de remplacer 'default' par (par exemple) @p1 et vous êtes triés. Ce remplacement peut être:

-- TSQL 
REPLACE(@cmd, '''default''', '@p1') 

ou

// C# 
.Replace(@"'default'", @"@p1") 

De C#, cela un DbCommand avec des paramètres; à partir de T-SQL, vous pouvez considérer sp_ExecuteSQL. De toute façon, vous voudriez finir avec:

select * from tblname where test = @p1 

Et fournissez @ p1 comme paramètre. Donc, de C#:

DbParameter param = cmd.CreateParameter(); 
param.Value = 0; // etc 
cmd.Parameters.Add(param); 

Ou de TSQL:

EXEC sp_ExecuteSQL @cmd, N'@p1 varchar(50)', 0 

(remplacer varchar(50) avec le type correct)

Questions connexes