我需要从this post进一步优化我的存储过程结果集,我需要过滤我的结果集以仅显示emailaddr为NULL的记录(意味着只显示Invoice_DeliveryType
值为'N'的记录)。
在众多查询中,我尝试过:
select
Invoice_ID, 'Unknown' as Invoice_Status,
case when Invoice_Printed is null then '' else 'Y' end as Invoice_Printed,
case when Invoice_DeliveryDate is null then '' else 'Y' end as Invoice_Delivered,
(case when Invoice_DeliveryType <> 'USPS' then ''
when exists (Select 1
from dbo.Client c
Where c.Client_ID = SUBSTRING(i.Invoice_ID, 1, 6) and
c.emailaddr is not null
)
then 'Y'
else 'N'
end)
Invoice_ContactLName + ', ' + Invoice_ContactFName as ContactName,
from
dbo.Invoice
left outer join
dbo.fnInvoiceCurrentStatus() on Invoice_ID = CUST_InvoiceID
where
CUST_StatusID = 7
AND Invoice_ID = dbo.Client.Client_ID
AND dbo.client.emailaddr is NULL
order by
Inv_Created
但是我收到了错误
nvarchar值'20111028995999'的转换溢出了一个int列
如何让存储过程仅返回DeliveryType = 'N'
的记录?
答案 0 :(得分:1)
尝试将存储的proc结果选择到临时表中,然后选择 *来自#TempTable
答案 1 :(得分:0)
我们可以使用模式定义来解决此问题。
似乎在您的一个案例陈述中发生了隐式转换,但如果没有架构定义,则很难找到哪一个。
您无法在CASE表达式中安全地混合数据类型,除非您完全确定任何隐式转换都能正常运行,确定您应该明确转换。
根据错误消息来判断是否包含可能是字符串(20111028
)加上某种其他数据的时间?时间?(995999
)它可能是要做的事情使用Invoice_DeliveryDate
,但这是一个没有更多细节的黑暗镜头。