2014-08-29 22 views
0

如果包含AND HostApplication子句,則此查詢不起作用。我的動態SQL查詢有什麼問題?使用char數據類型

參數:

ALTER PROCEDURE [dbo].[updateNumbers_ArchiveDB] 
(
    @accountNumber varchar(50), 
    @accountType char(4), 
    @padding varchar(50), 
    @proc_dateStart datetime, 
    @proc_dateEnd datetime 
) 

這裏是動態SQL:

set @q = 'Update ' + @cTableName + 
    ' SET LogicalAccount = '+ @padding + @accountNumber + 
    ' WHERE ProcessDate BETWEEN CAST('''+CONVERT(VARCHAR(20),@proc_dateStart)+''' AS DATE) AND CAST('''+CONVERT(VARCHAR(20),@proc_dateEnd)+''' AS DATE)' + 
    ' AND HostApplication =' + '''+ @accountType +''' 

這裏是我的exec語句:

exec updateNumbers_ArchiveDB @accountNumber = N'1020', 
          @accountType = N'd', 
          @padding = N'123', 
          @proc_dateStart = '2014-01-30', 
          @proc_dateEnd = '2014-01-31' 

如果我周圍@accounttype刪除單引號:(''[email protected] +'')我得到這個錯誤:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'd'.

使用3個引號時,它的運行沒有錯誤,但沒有更新。

隨着1報價(('[email protected] +'))我得到:

Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@accountType".

我知道有是一種藝術使用動態SQL報價,但我還沒有發現使用動態SQL CHAR數據類型的任何資源。

回答

1
+ ''''+ @accountType +'''' 

應該修復它

+0

大聲笑,當然這只是需要另一個單引號。我不擅長動態SQL,謝謝! – user1729696 2014-08-29 22:14:50

+0

不是問題,不要忘記標記爲已回答。謝謝 – mxix 2014-08-29 22:21:44

+0

Stackoverflow讓我等待標記答案。 :( – user1729696 2014-08-29 22:22:48