2014-08-29 46 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