Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询结构-变量_Sql_Sql Server_Variables_Ssms - Fatal编程技术网

SQL查询结构-变量

SQL查询结构-变量,sql,sql-server,variables,ssms,Sql,Sql Server,Variables,Ssms,我有一个查询,我想在其中包含一个新变量。我需要查询来检查这个变量是否返回NULL,如果返回NULL,则从resultset中排除该记录 我需要合并的变量是@PaymentStatusID_DV,但我不知道将它放在哪里才有意义。要分配它,请执行以下操作: SELECT @PaymentStatusID_DV = dbo.fnGetSimpleDvByThirdPartyField(c.ClientID,c.CustomerID,l.LeadID,ca.CaseID,m.MatterID,1490,

我有一个查询,我想在其中包含一个新变量。我需要查询来检查这个变量是否返回NULL,如果返回NULL,则从resultset中排除该记录

我需要合并的变量是@PaymentStatusID_DV,但我不知道将它放在哪里才有意义。要分配它,请执行以下操作:

SELECT @PaymentStatusID_DV = dbo.fnGetSimpleDvByThirdPartyField(c.ClientID,c.CustomerID,l.LeadID,ca.CaseID,m.MatterID,1490,4370) 
那么我在哪里可以把它放在这个查询中,然后检查空值呢?不为空

DECLARE @SettlementDate DATE, 
        @PaymentStatusID_DV VARCHAR(2000),
        @ClientID = 384

SELECT @SettlementDate=dbo.fnAddWorkingDays ( dbo.fnGetNextWorkingDate (CONVERT(DATE,GETDATE()),0) ,cdv.ValueInt + 1 ) 
FROM ClientDetailValues cdv WITH (NOLOCK) WHERE cdv.DetailFieldID=170226 AND cdv.ClientID=@ClientID

SELECT
c.CustomerID,ca.CaseID,ca.LatestInProcessLeadEventID [LeadEventID],m.MatterID, COUNT(m.MatterID)
FROM Customers c WITH (NOLOCK) 
INNER JOIN Lead l WITH (NOLOCK) ON c.CustomerID=l.CustomerID
INNER JOIN Cases ca WITH (NOLOCK) ON l.LeadID=ca.LeadID
INNER JOIN Matter m WITH (NOLOCK) ON ca.CaseID=m.CaseID
LEFT JOIN MatterDetailValues suspended WITH (NOLOCK) ON m.MatterID=suspended.MatterID AND suspended.DetailFieldID=175275
INNER JOIN LeadTypeRelationship ltr WITH (NOLOCK) ON ltr.ToMatterID=m.MatterID AND ltr.FromLeadTypeID=1492 AND ltr.ToLeadTypeID=1493
INNER JOIN Matter pam WITH (NOLOCK) ON ltr.FromMatterID=pam.MatterID
INNER JOIN CustomerPaymentSchedule cps WITH (NOLOCK) ON cps.CustomerID = c.CustomerID AND cps.WhenCreated > '2017-09-01'
INNER JOIN Account a WITH (NOLOCK) ON a.AccountID = cps.AccountID
WHERE  c.Test=0 AND c.ClientID=@ClientID
AND NOT EXISTS ( SELECT * FROM LeadEvent le WITH (NOLOCK) WHERE le.CaseID=ca.CaseID AND le.EventDeleted=0 AND le.EventTypeID=155198 ) -- and collections are not on hold
AND (suspended.ValueInt <> 5144 OR suspended.ValueInt IS NULL) -- and policy status is live
AND cps.CustomerLedgerID IS NULL -- and payment schedule entry has not already been queued in the GL
AND cps.ActualCollectionDate <= @SettlementDate -- and payment date is before or the same as settlement day
AND cps.PaymentGross < 0 -- exclude zero value payments
AND a.AccountTypeID=1 -- and this is a DD payment
GROUP BY c.CustomerID,ca.CaseID,ca.LatestInProcessLeadEventID,m.MatterID

你真的需要使用这个变量吗?最好的方法是在WHERE语句中包含函数:

WHERE ... AND dbo.fnGetSimpleDvByThirdPartyField(c.ClientID,c.CustomerID,l.LeadID,ca.CaseID,m.MatterID,1490,4370) IS NOT NULL

太多了,看不懂。。。看看从结果集中排除它是什么意思?这是什么?@timbiegeleiseni如果一条记录符合所有其他标准,但没有@PaymentStatusID\u DV,那么我不希望记录返回。这太可怕了。此查询似乎正在提取财务信息。仅仅因为这是一个标准并不意味着这是一个好的决定。该提示意味着您将随机获得丢失和/或重复的行。在处理需要准确的事情时,这是一个主要问题。我理解这可能超出了你改变的能力,但你应该理解这个暗示的问题。我为一个到处都使用这个提示的客户做了一些咨询,当他们意识到它有多糟糕时,撤销它花费了他们数百万美元。