2013-10-18 41 views
1

请参阅下面的DDL:SQL值是否包含换行符?

CREATE TABLE SQLTestTable (sqltest VARCHAR(100)) 

INSERT INTO SQLTestTable (sqltest) values ('INSERT INTO Person VALUES (''SELECT * FROM PERSON --THIS IS A TEST WHERE ID=1'')') 

INSERT INTO SQLTestTable (sqltest) values ('INSERT INTO Person VALUES (
''SELECT * FROM --THIS IS A TEST 
PERSON WHERE ID=1'')') 

注意,在第一个INSERT语句它是所有在同一行,而在INSERT语句包含两个事实并非如此。如果我将sqltest值提取到SQLCommand.CommandText中并执行SQLCommand,则它适用于第二次插入,但不适用于第一次插入,即第一次插入不起作用,因为该注释会导致语法错误。是否为第二次插入以某种方式存储在数据库中的换行符?

+0

你知道你可以用'/ *注释* /'无需换行吗? –

+0

什么是语法错误? –

+1

@DanBracuk当他试图执行'INSERT INTO人VALUES(“” SELECT * FROM PERSON --...'出现的语法错误。OP不问为什么发生这种情况,但第二个值被而如何存储,因为它包括这个行代码是为了形成有效的SQL – Taemyr

回答

1

换行符被存储在数据库中。可能是回车后跟换行。 (ASCII码10和13)。

+0

谢谢。这就是我的想法。是否有任何文档支持这个? – w0051977

+0

这是字符串的一般行为 – Taemyr

+0

@ w0051977一个字符串包含在开头的'''和结尾'''之间的字符,在开头的'''和结尾的'''之间有CR和LF字符,这意味着字符串包含这些字符,没有文档说明这些字符有一个特殊的含义,就像没有文档那样,例如'+'在''中没有特殊的含义''就是缺少一个例外的文档这个。 :) – hvd

0

如果妳想要删除新行字符和制表符,然后用下面的查询:

REPLACE(REPLACE(REPLACE(column_name, CHAR(13) + CHAR(10), ''), CHAR(13), ''), CHAR(10), '') 
+0

为什么三个替换? IE浏览器。你为什么先删除lfcr,然后cr,然后lf。我错误地认为删除cr,然后lf也会删除lfcr? – Taemyr