2011-10-12 42 views
10

我想知道是否有办法在SQL Server 2008中存储单引号。我正在构建几个报告,并且所有这些报告都完全相同,除了它们仅在我正在选择的代码。例如,一个报告使用代码'abc','def','ghi',另一个报告使用代码'jkl','mno','pqr'。我正在考虑减少我将要做的存储过程的数量,我可以在报告中设置一个参数来选择要运行的报告类型。基于此,我会使用正确的代码。所以我打算将这些代码存储在一个varchar变量中。下面是我所期待的功能:在varchar变量中存储单引号SQL Server 2008

DECLARE @codes1 varchar, @codes2 varchar 
SET @codes1 = ''abc', 'def', 'ghi'' 
SET @codes2 = ''jkl', 'mno', 'pqr'' 

然后,我会使用基于用户选择的参数的正确VARCHAR变量。唯一的问题是设置变量,因为字符串中将有单引号(该字符串将用于SQL'IN'语句中,这就是引用单引号的原因)。

回答

18

像这样。是的,Oded是正确的。正确的术语是“逃避”。您可以通过它''

DECLARE @codes1 varchar(50), @codes2 varchar(50) 
SET @codes1 = '''abc'', ''def'', ''ghi''' 
SET @codes2 = '''jkl'', ''mno'', ''pqr''' 
+1

也就是说,通过加倍“'''来逃避单个''''。 – Oded

+2

您需要在变量声明中使用一个长度以避免截断1个字符。 –

+0

谢谢!这正是我需要的!另外,感谢@Martin的补充评论!我也需要这个! –

0

尝试加倍,以避免硬编码值逃避单引号'。创建一个表来保存这些值以及将它们分组的方法。

Table CodeGroups 
GroupNumber | Codes 
     1 | abc 
     1 | def 
     1 | ghi 
     2 | kkl 
     2 | mno 
     2 | pqr 

通过这种方式,用户只需要选择GroupNumber = 1

您的CodeGroups表的代码串链接表。所有你需要做的添加另一个代码是在这个表中输入一个条目并给它一个组号码。

0

只需加倍就可以避免单个问题。

Value Varchar2(10):='abc''; ---你会得到错误。

Value Varchare(10):='''abc'''; ---将解决你的问题。

0
      int varId = "1"; 
          String varItem = "Google's root"; 

          String strSQL = "INSERT INTO table(" 
              + "id," 
              + "item" 
              +")" 
              + "VALUES('" + varId 
              + "', '" + varItem 
              + "')"; 
+0

使用SQL Server 2008提到的OP - 您的解决方案是否适用于SQL Server 2008?此外,您应该在上面提供解决方案的解释。 –