【问题标题】:APOSTROPHE DYNAMIC SQL撇号动态 SQL
【发布时间】:2011-04-13 19:47:06
【问题描述】:
DECLARE @SQL Varchar(Max)
DECLARE @DESCR Varchar(Max)

-- Customer enters description into @Descr
SET @SQL = 'Update TableName SET FieldName='''
+ @DESCR
+ ''' WHERE ID=123'

问题是当客户在@Descr 变量中输入撇号时。

问:在 Microsoft SQL Server 2005 中,如何将所有撇号替换为双撇号?

【问题讨论】:

    标签: sql-server sql-server-2005 tsql dynamic-sql


    【解决方案1】:

    如果这甚至需要动态 SQL(您显示的代码不需要),那么使用参数化 SQL 和 sp_executesql 来避免 SQL 注入的可能性。

    DECLARE @SQL NVarchar(Max)
    DECLARE @DESCR NVarchar(Max)
    
    -- Customer enters description into @Descr
    
    
    SET @SQL = 'Update TableName SET FieldName=@DESCR WHERE ID=123'
    
    exec sp_executesql @SQL, N'@DESCR NVarchar(Max)', @DESCR =@DESCR
    

    【讨论】:

    • 谢谢马丁!是的,它必须是动态的——我不想让这个例子复杂化。
    【解决方案2】:

    不推荐用于生产,但可以工作。

    SET @DESCR = REPLACE(@DESCR, '''', '''''')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      相关资源
      最近更新 更多