存儲過程中特殊符號的處理-sql語句當參數的存儲過程-複雜查詢

在做一個小項目的時候遇到一個很糾結的問題。這裏和大家分享一下 ,希望對有同樣問題的朋友有所幫助

問題:有如下一個複雜查詢

在三層架構中這是一個讓人很糾結的問題,最終覺得把界面層所有參數都封裝到一個實體類中,傳遞三個實體類作參數,

''' <summary>
''' 組合查詢條件實體
''' </summary>
Public Class Condition

    ''' <summary>
    ''' 字段名
    ''' </summary>
    Private m_FileName As String
    ''' <summary>
    ''' 操作符
    ''' </summary>
    Private m_Operate As String
    ''' <summary>
    ''' 字段值
    ''' </summary>
    Private m_FileValue As String
    ''' <summary>
    ''' 關係符
    ''' </summary>
    Private m_Relation As String

    ''' <summary>
    ''' 字段名
    ''' </summary>
    Public Property FileName() As String
        Get
            Return m_FileName
        End Get
        Set(ByVal Value As String)
            m_FileName = Value
        End Set
    End Property

    ''' <summary>
    ''' 操作符
    ''' </summary>
    Public Property Operate() As String
        Get
            Return m_Operate
        End Get
        Set(ByVal Value As String)
            m_Operate = Value
        End Set
    End Property

    ''' <summary>
    ''' 關係符
    ''' </summary>
    Public Property Relation() As String
        Get
            Return m_Relation
        End Get
        Set(ByVal Value As String)
            m_Relation = Value
        End Set
    End Property

    ''' <summary>
    ''' 字段值
    ''' </summary>
    Public Property FileValue() As String
        Get
            Return m_FileValue
        End Get
        Set(ByVal Value As String)
            m_FileValue = Value
        End Set
    End Property


End Class ' Condition

緊接着又有一個問題,想把sql語句查詢寫成存儲過程,一路坎坷,一些單引號,空格 很多小的問題很讓人頭疼,這裏把最終的解決方案分享一下。

ALTER PROCEDURE [dbo].[proc_Condition_Query]
  @FileName1 varchar(10),  @Operator1 varchar(1),@FileValue1  varchar(10),@Relation1 varchar(10),
  @FileName2 varchar(10),  @Operator2 varchar(1),@FileValue2  varchar(10),@Relation2 varchar(10),
  @FileName3 varchar(10),  @Operator3 varchar(1),@FileValue3  varchar(10),@InfoName varchar(10) 表的名稱
AS
 DECLARE @TempSql varchar(500) --臨時存放sql語句
BEGIN
set @TempSql= 'select * from '+@InfoName+' where ' + @FileName1 + @Operator1 + char(39)+ @FileValue2+char(39)--拼接sql字符串,單引號用Assci值替代
if (@Relation1 is not null)
 begin
 if (@Relation2 is null)
  begin
   set @TempSql =@TempSql+space(1)+@Relation1+space(1)+@FileName2+space(1)+@Operator2+space(1) +char(39)+ @FileValue2+char(39)--操作符兩側的空格用Space(1) 解決

  end
 else
  begin
  set @TempSql =@TempSql+space(1)+@Relation1+space(1)+ @FileName2+space(1)+@Operator2+space(1) +char(39)+ @FileValue2+char(39)+space(1)+@Relation2+space(1)+ @FileName3+space(1)+@Operator3+space(1) +char(39)+ @FileValue3+char(39)

  end
 end
 exec(@TempSql)
END

到這裏整個問題就解決完了,結果終於出現了

 

總結問題:其中不加單引號會出現以下問題

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章