SQL字符串值跨越查询中的多行

时间:2011-11-16 03:39:15

标签: sql string sqlite

更新:bio可能包含撇号(参见更新示例)

我有一个SQL查询,其值跨越多行,导致查询失败:

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

在C#中,您可以在字符串@之前放置Bio=@"..."以允许它跨越多行,但我不确定如何使用SQL查询实现相同的功能。你如何得到一个跨越多行的字符串,而不必像手动连接字符串那样:

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

4 个答案:

答案 0 :(得分:49)

SQL Server允许以下内容(小心使用单引号而不是双引号)

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

答案 1 :(得分:0)

列“BIO”数据类型是什么?什么数据库服务器(sql / oracle / mysql)? 只要遵守列的数据类型中的字符限制(即:varchar(200)),就应该可以跨越多行。 尝试使用单引号,这可能会有所不同。 这对我有用:

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

另外,如果要在C#中将sql字符串合并在一起,则可能需要检查单引号。如果变量包含可以将代码从sql语句中转义出来的单引号,那么就不要执行你期望看到的所有行。

顺便说一句,您可以像在C#中一样使用分号来划分SQL语句,就像我们一样。

答案 2 :(得分:0)

使用您的VARCHAR,您可能还需要指定长度,或通常

如何抓取文本,对其进行定位,然后将其放入查询中

String TableName = "ComplicatedTableNameHere";  
EditText editText1 = (EditText) findViewById(R.id.EditTextIDhere); 
String editTextString1 = editText1.getText().toString();  

BROKEN DOWN

String TableName = "ComplicatedTableNameHere";            
    //sets the table name as a string so you can refer to TableName instead of writing out your table name everytime

EditText editText1 = (EditText) findViewById(R.id.EditTextIDhere); 
    //gets the text from your edit text fieldfield 
    //editText1 = your edit text name
    //EditTextIDhere = the id of your text field

String editTextString1 = editText1.getText().toString();  
    //sets the edit text as a string
    //editText1 is the name of the Edit text from the (EditText) we defined above
    //editTextString1 = the string name you will refer to in future

然后使用

       /* Insert data to a Table*/
       myDB.execSQL("INSERT INTO "
         + TableName
         + " (Column_Name, Column_Name2, Column_Name3, Column_Name4)"
         + " VALUES ( "+EditTextString1+", 'Column_Value2','Column_Value3','Column_Value4');");

希望这有助于一些......

注意每个字符串都在

之内
'"+stringname+"'

它的'和'启用了srting的多行元素,没有它你就得到第一行,甚至不确定你是否得到整行,它可能只是第一个单词

答案 3 :(得分:-3)

我更喜欢使用@符号,因此我完全可以查看查询,并将其复制并粘贴到查询文件中:

string name = "Joe";
string gender = "M";
string query = String.Format(@"
SELECT
   *
FROM
   tableA
WHERE
   Name = '{0}' AND
   Gender = '{1}'", name, gender);

对于长期复杂的查询,这真的很棒。不错的是它保留了标签和换行符,因此粘贴到查询浏览器中会保留良好的格式