【问题标题】:Storing single quotes in varchar variable SQL Server 2008在 varchar 变量 SQL Server 2008 中存储单引号
【发布时间】:2011-12-06 10:26:37
【问题描述】:

我想知道是否有办法在 SQL Server 2008 中存储单引号。我正在构建几个报告,所有这些报告都完全相同,只是它们在我选择的代码上有所不同。例如,一份报告使用代码“abc”、“def”、“ghi”,另一份报告使用代码“jkl”、“mno”、“pqr”。我正在考虑减少我必须制作的存储过程的数量,我可以在报表上创建一个参数来选择运行哪种类型的报表。基于此,我会使用正确的代码。所以我打算将这些代码存储在一个 varchar 变量中。以下是我希望的功能:

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

然后,我将根据用户选择的参数使用适当的 varchar 变量。唯一的问题是设置变量,因为字符串中将包含单引号(该字符串将在 SQL 'IN' 语句中使用,这就是存在单引号的原因)。

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008


    【解决方案1】:
                                int varId = "1";
                                String varItem = "Google's root";
    
                                String strSQL = "INSERT INTO table("
                                                + "id,"
                                                + "item"
                                                +")" 
                                                + "VALUES('" + varId 
                                                + "', '" + varItem
                                                + "')";
    

    【讨论】:

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

    通过加倍来避免单引号问题。

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

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

    【讨论】:

      【解决方案3】:

      尽量避免硬编码值。创建一个表格来保存这些值以及对它们进行分组的方法。

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

      这样用户只需选择 GroupNumber = 1

      您将 CodeGroups 表链接到带有代码字符串的表。添加另一个代码所需要做的就是在此表中输入一个条目并为其指定一个组号。

      【讨论】:

        【解决方案4】:

        像这样。是的,奥德是正确的。正确的术语是“逃避”。您可以通过加倍 '' 来转义单引号 '

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

        【讨论】:

        • Aka,通过加倍 '' 来逃避单个 '
        • 您还需要在变量声明中设置一个长度,以避免在 1 个字符处截断。
        • 谢谢!这正是我所需要的!另外,感谢@Martin 的补充评论!我也需要这个!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 2014-08-08
        • 1970-01-01
        相关资源
        最近更新 更多