我正在使用sql server2008(动态sql)编写一个存储过程,现在我的问题是我将4个值传递给存储过程,因为UserAgentID varchar(50)传递值或为空,现在我可以通过任何值如(1233)基于显示值,我现在传递空,如('')基于显示的字段空值,但我正在使用表Agentid是整数数据类型所以我传递 IS NULL 如何写条件基础,我正在尝试这样
ALTER Procedure [dbo].[usp_GetSearch123]
(
@SearchValue varchar(100),
@SearchBy varchar(250),
@DbName varchar(50),
@UserAgentID varchar(50)
)
AS
Begin
Declare @cmd varchar(5000)
select @cmd =
'Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.SubmissionNumber,QT.UnderWriter as UnderWriter,LC.Name as LineCode,QT.DBAName as DBAName
from Agent_Quote QT,Users US,' + @DbName + '..StatusCode SC, ' + @DbName+'..Linecode LC
where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and SC.StatusCode!=''C'' and US.UserID=QT.CreatedBy and US.AgentID like'''+@UserAgentID+''' and
(QT.Name like ''' + @SearchValue + '%'' or QT.DBAName like ''' + @SearchValue +'%'')
order by QT.Name,QuoteNumber desc'
print @cmd
exec(@cmd)
end
现在我在用户表空值中传递空,那么如何编写条件请帮助我任何一个... 感谢你 hemanth
答案 0 :(得分:0)
您可以尝试这样的事情
IF ISNULL(@UserAgentID, -1) = -1
select @cmd =
'Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.SubmissionNumber,
QT.UnderWriter as UnderWriter,LC.Name as LineCode,QT.DBAName as DBAName
from Agent_Quote QT,Users US,' + @DbName + '..StatusCode SC, ' + @DbName+'..Linecode LC
where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and
SC.StatusCode!=''C'' and US.UserID=QT.CreatedBy and
US.AgentID is nulll and
(QT.Name like ''' + @SearchValue + '%'' or QT.DBAName like ''' + @SearchValue +'%'')
order by QT.Name,QuoteNumber desc'
else
select @cmd =
'Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.SubmissionNumber,
QT.UnderWriter as UnderWriter,LC.Name as LineCode,QT.DBAName as DBAName
from Agent_Quote QT,Users US,' + @DbName + '..StatusCode SC, ' + @DbName+'..Linecode LC
where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and
SC.StatusCode!=''C'' and US.UserID=QT.CreatedBy and
US.AgentID like'''+@UserAgentID+''' and
(QT.Name like ''' + @SearchValue + '%'' or QT.DBAName like ''' + @SearchValue +'%'')
order by QT.Name,QuoteNumber desc'
或
select @cmd =
'Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.SubmissionNumber,
QT.UnderWriter as UnderWriter,LC.Name as LineCode,QT.DBAName as DBAName
from Agent_Quote QT,Users US,' + @DbName + '..StatusCode SC, ' + @DbName+'..Linecode LC
where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and
SC.StatusCode!=''C'' and US.UserID=QT.CreatedBy and
((@UserAgentID is null AND US.AgentID is null) OR US.AgentID like'''+@UserAgentID+''') and
(QT.Name like ''' + @SearchValue + '%'' or QT.DBAName like ''' + @SearchValue +'%'')
order by QT.Name,QuoteNumber desc'
答案 1 :(得分:0)
问题有点令人困惑,但如果它以AgentID问题为中心,我将做出以下假设:
1)表中的AgentID的数据类型为int
2)您在AgentID列中也有NULL值
因此,您将该变量作为字符串传递(您不应该这样做,保持数据类型一致并传入0或其他无效的id值),您可以尝试按以下方式执行您的AgentID条件:
--First, create int prameter and validate the @UserAgentID parameter
DECLARE @AgentID int
SELECT @AgentID = 0
IF ISNUMERIC(@UserAgentID)=1
BEGIN
SELECT @AgentID = CAST(@UserAgentID AS int)
END
--update your @UserAgentID condition statement as follows
... and ISNULL(US.AgentID,0) = '+CAST(@AgentID AS nvachar(10))+' and
...
如果您的agentid是varchar类型列,则以下内容应该有效...
... and ISNULL(US.AgentID,'') like ''' + ISULL(@UserAgentID,'') + ''' and
同样,条件语句和数据类型让我在这里(对于ID列需要“LIKE”?)但希望这会引导您朝着正确的方向前进。
HTH
戴夫