SQL撇号

问题描述:

我怎么能生成SQL字符串包含一个空字符串: ''SQL撇号

我尝试这样做:

DECLARE @TEST NVARCHAR(50),@ COL1 NVARCHAR(50) @ COL2 NVARCHAR(50) SELECT @ COL1 ='A',@ COL2 ='B'

SELECT @TEST ='SELECT''['+ @ COL1 +'],''['+ @ COL2 +' ]'

SELECT @TEST

但字符串结尾看起来像:

选择 '[A],'[B]

当它需要看起来像:

SELECT' [A],''[B]

谢谢。在SQL字符串

+2

您需要了解:1 SQL注射](http://en.wikipedia.org/wiki/SQL_injection)和2. [参数化查询](http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or -give-me-death.html) – Oded 2011-12-15 18:40:19

两个单引号被视为一个转义的单引号,因此,为了在输出生成两个,你需要把4输入,就像这样:

SELECT @TEST = 'SELECT '''' ['+ @COL1 + '], '''' [' + @COL2+ ']' 
+0

谢谢 - 工作! – Rivka 2011-12-15 18:33:41

那么,快速回答是:''''(将它们加倍)

例如SELECT 'XX''''XX'XX''XX

因为“你为什么要这样做”部分让我非常紧张。

您不需要连接字符串。

SELECT @COL1, @COL2 

应该足够了。参数@ COL1和@ COL2将被实际值自动替换。

但是,您不能像这样动态声明列名称。参数代表值。通常你会做这样的事情:如果你打算动态地更改列名

SELECT [Name] FROM mytable WHERE [email protected] 

,那么你就不能使用单引号都:

SET @sql = 'SELECT [' + @COL1 + '], [' + @COL2 + ' FROM mytable'; 
EXECUTE sp_executesql @sql; 
+0

谢谢,但我想生成一个SQL字符串,它将在执行时选择一个空字符串以及列别名(参数)。我不想仅仅选择参数值。 – Rivka 2011-12-15 18:46:40