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

來源:互聯網
上載者:User

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

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

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

''' <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

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

 

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

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.