web-dev-qa-db-fra.com

Valeur de chaîne SQL couvrant plusieurs lignes dans une requête

UPDATE: la bio peut contenir des apostrophes (voir exemple mis à jour)

J'ai une requête SQL qui a une valeur qui s'étend sur plusieurs lignes et provoque l'échec de la requête:

UPDATE User SET UserId=12345, Name="J Doe", Location="USA", Bio="I'm a
bio that has an apostrophe, and I'm 
spanning multiple lines!" 
WHERE UserId=12345

En C #, vous pouvez mettre un @ avant la chaîne Bio=@"..." afin de lui permettre de couvrir plusieurs lignes, mais je ne suis pas sûr de savoir comment obtenir la même chose avec des requêtes SQL. Comment obtenir une chaîne qui s'étend sur plusieurs lignes sans avoir à concaténer manuellement les chaînes: 

Bio="I'm a"
+" bio that has an apostrophe, and I'm"
+" spanning multiple lines!" 
26
Kiril

SQL Server permet les opérations suivantes (veillez à utiliser des guillemets simples au lieu de doubles)

UPDATE User
SET UserId = 12345
   , Name = 'J Doe'
   , Location = 'USA'
   , Bio='my bio
spans 
multiple
lines!'
WHERE UserId = 12345
44
Adam Wenger

Quel est le type de données de la colonne "BIO"? Quel serveur de base de données (sql/Oracle/mysql)? Vous devriez pouvoir étendre sur plusieurs lignes tout ce que vous voulez tant que vous respectez la limite de caractères dans le type de données de la colonne (ie: varchar (200)) . Essayez d'utiliser des guillemets simples, cela pourrait faire une différence . Cela fonctionne pour moi:

update table set mycolumn = 'hello world,
my name is carlos.
goodbye.'
where id = 1;

En outre, vous souhaiterez peut-être mettre en place des vérifications pour les guillemets simples si vous concatinez ensemble la chaîne SQL en C #. Si la variable contient des guillemets simples susceptibles d'échapper au code hors de l'instruction SQL, il ne faut donc pas exécuter toutes les lignes attendues.

En passant, vous pouvez délimiter vos instructions SQL avec un point-virgule, comme vous le faites en C #, tout comme pour votre information.

0
Losbear