视图中最大长度为8000错误 [英] Maximum length 8000 error in view

查看:84
本文介绍了视图中最大长度为8000错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在sql中有视图,给出MAXIMUM LENGTH 8000



请解决。提前致谢。



I have the view in sql, gives "MAXIMUM LENGTH 8000"

Please resolve. Thanks in advance.

SELECT     Type, Invoice, Receipt, InvoiceDt, Total, PaidToDate, ReceiptDt, NoDocSum, CardCode, CardName, SaleExecutiveName, GroupName, slpName, DelTrd, SALETYPE,
                      DATEDIFF(day, InvoiceDt, GETDATE()) AS Daycount, CredLimit
FROM         OPENQUERY(sapsvr, 
                      '
SELECT  distinct ''Bill'' as Type, T0.DocNum AS''Invoice'', T1.DocNum AS''Receipt'', T0.DocDate AS''InvoiceDt'',case  when T0.DocTotal >0 then T0.DocTotal else T0.DocTotal end as Total, 
 T0.PaidToDate , 
                      G.DocDate  AS''ReceiptDt'', G.NoDocSum, T0.CardCode, T0.CardName,
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(100)) AS SALETYPE ,cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd ,dbo.ocrd.U_CreditLimit  as CredLimit
FROM     (select  NoDocSum,DocDate,DocNum,docentry from  dbo.ORCT where CANCELED =''N'' ) G INNER JOIN
                      dbo.RCT1 AS T1 ON G.DocNum = T1.DocNum right outer join 
                      dbo.OINV AS T0 ON T0.ReceiptNum = G.docentry inner join dbo.ocrd  on T0.CardCode = dbo.ocrd.CardCode
					 LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode LEFT OUTER JOIN
                      dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID LEFT OUTER JOIN
                       OSLP on dbo.OCRD.slpcode=OSLP.slpcode
 inner join ojdt T3 on T0.TransId=T3.TransId 
inner join jdt1 T4 on (T4.TransId=T3.TransId 
and T4.shortname= T0.cardcode )
WHERE     (T0.CANCELED =''N'')  AND (T0.DocStatus =''o'') AND (T0.DocTotal - T0.PaidToDate > 0) 

 and dbo.ocrd.cardType=''c''




union all


SELECT distinct  ''Bill'' as Type, T0.DocNum AS ''Invoice'', T1.DocNum AS ''Receipt'' , T0.DocDate AS''InvoiceDt'',case  when T0.DocTotal >0 then T0.DocTotal else T0.DocTotal end as Total , T1.DocTotal as PaidToDate,
                      T1.DocDate  AS ''ReceiptDt'', null as''NoDocSum'', T0.CardCode, T0.CardName,
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(50)) AS SALETYPE , cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd ,dbo.ocrd.U_CreditLimit  as CredLimit 
FROM      dbo.ORIN T1 inner join     dbo.rin1 T3  on T3.docentry=T1.docentry INNER JOIN
                       dbo.OINV AS T0 ON T3.BaseRef = T0.DocNum and T0.CardCode = T1.CardCode inner join dbo.ocrd  on T0.CardCode = dbo.ocrd.CardCode
					 LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode LEFT OUTER JOIN
                      dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID LEFT OUTER JOIN
                     OSLP on dbo.OCRD.slpcode=OSLP.slpcode
WHERE     (T0.CANCELED =''N'')  AND (T0.DocStatus =''o'') AND (T0.DocTotal - T1.DocTotal > 0) and dbo.ocrd.cardType=''c'' and T3.BaseType=15

 
union all



SELECT  distinct  ''Receipt'' as Type, dbo.ORCT.DocNum AS ''Invoice'',
 T0.Docnum 
,dbo.ORCT.DocDate AS ''Invoice Dt'' ,case  when dbo.ORCT.cashsum >0 then dbo.ORCT.cashsum 
else dbo.ORCT.checksum end as Total, ( case  when dbo.ORCT.cashsum >0 then dbo.ORCT.cashsum 
else dbo.ORCT.checksum end -dbo.ORCT.OpenBal) as PaidToDate, T0.DocDate AS ''Receipt Dt'' , dbo.ORCT.NoDocSum,  dbo.ORCT.CardCode,  dbo.ORCT.CardName,
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(50)) AS SALETYPE ,cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd ,dbo.ocrd.U_CreditLimit  as CredLimit 
FROM         dbo.ORCT 
      left outer join 
             dbo.RCT1 AS T1 ON dbo.ORCT.DocNum = T1.DocNum 
       left outer join 
             dbo.OINV AS T0 ON  T0.ReceiptNum = dbo.ORCT.DocEntry 
         inner  join 
            dbo.ocrd  on dbo.ORCT.CardCode = dbo.ocrd.CardCode
       LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode
       LEFT OUTER JOIN
            dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID
       LEFT OUTER JOIN
           OSLP on dbo.OCRD.slpcode=OSLP.slpcode 
         inner  join 
          ojdt T3 on dbo.ORCT.TransId=T3.TransId 
         inner  join 
        jdt1 T4 on (T4.TransId=T3.TransId and T4.shortname= dbo.ORCT .cardcode )
WHERE 
(dbo.ORCT.CANCELED = ''N'') and 
 dbo.ORCT.OpenBal>0 
and  dbo.ocrd.cardType=''c''

union all


SELECT  distinct  ''CR'' AS Type ,T0.DocNum,null as Receipt,T0.DocDate,case  when T0.DocTotal >0 then T0.DocTotal else T0.DocTotal end as Total , T0.PaidToDate,null AS ReceiptD, null as NoDocSum,  T0.CardCode, T0.CardName, 
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(50)) AS SALETYPE ,cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd , dbo.ocrd.U_CreditLimit  as CredLimit 
                     
FROM         dbo.ORIN T0 inner join dbo.ocrd  on T0.CardCode = dbo.ocrd.CardCode
						 LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode LEFT OUTER JOIN
                      dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID LEFT OUTER JOIN
                      OSLP on dbo.OCRD.slpcode=OSLP.slpcode
WHERE     (T0.PaidToDate = 0)and (T0.DocTotal - T0.PaidToDate)>0 and T0.DocStatus<>''c''  and dbo.ocrd.cardType=''c''  

union all
SELECT   distinct ''JDN'' AS Type ,T3.TransId,null as Receipt,T3.RefDate,case  when T0.Debit >0 then T0.Debit else T0.Debit end as Total , null as PaidToDate,null AS ReceiptD, null as NoDocSum,  dbo.ocrd.CardCode, dbo.ocrd.CardName,
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(50)) AS SALETYPE ,cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd , dbo.ocrd.U_CreditLimit  as CredLimit                      
FROM       ojdt T3 inner join   dbo.JDT1 T0 on  T3.TransId=T0.TransId  inner join dbo.ocrd  on T0.ShortName = dbo.ocrd.CardCode
						 LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode LEFT OUTER JOIN
                      dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID LEFT OUTER JOIN
                     OSLP on dbo.OCRD.slpcode=OSLP.slpcode

where T3.TransType=30  and T0.MthDate is null and dbo.ocrd.cardType=''c'' 

  union all

SELECT distinct  ''JCN'' AS Type ,T3.TransId,null as Receipt,T3.RefDate,case  when T0.credit>0 then T0.credit else T0.credit end as Total , null as PaidToDate,null AS ReceiptD, null as NoDocSum,  dbo.ocrd.CardCode, dbo.ocrd.CardName,
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(50)) AS SALETYPE ,cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd , dbo.ocrd.U_CreditLimit  as CredLimit 
                     
FROM       ojdt T3 inner join   dbo.JDT1 T0 on  T3.TransId=T0.TransId  inner join dbo.ocrd  on T0.ShortName = dbo.ocrd.CardCode
						 LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode LEFT OUTER JOIN
                      dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID LEFT OUTER JOIN
                    OSLP on dbo.OCRD.slpcode=OSLP.slpcode

where T3.TransType=30   and T0.MthDate is null  and dbo.ocrd.cardType=''c''  
union all
SELECT   distinct ''Out_Pay'' AS Type ,T0.DocNum,null as Receipt,T0.DocDate,case  when T0.DocTotal >0 then T0.DocTotal else T0.DocTotal end as Total , null PaidToDate,null AS ReceiptD, T0. NoDocSum,  T0.CardCode, T0.CardName,
                      dbo.OHEM.firstName + '' '' + dbo.OHEM.lastName AS SaleExecutiveName, dbo.OCQG.GroupName,OSLP.slpName,CAST (T0.U_Sales_Type AS VARCHAR(50)) AS SALETYPE ,cast(dbo.ocrd.u_customertype as varchar(100)) as  DelTrd , dbo.ocrd.U_CreditLimit  as CredLimit 
                     
FROM         dbo.OVPM T0 inner join dbo.ocrd  on T0.CardCode = dbo.ocrd.CardCode
						 LEFT OUTER JOIN
                      dbo.OCQG ON dbo.OCRD.GroupNum = dbo.OCQG.GroupCode LEFT OUTER JOIN
                      dbo.OHEM ON dbo.OCRD.DfTcnician = dbo.OHEM.empID LEFT OUTER JOIN
                       OSLP on dbo.OCRD.slpcode=OSLP.slpcode
					 inner join ojdt T3 on T0.TransId=T3.TransId 
inner join jdt1 T4 on (T4.TransId=T3.TransId 
and T4.shortname= T0.cardcode )
WHERE     (T0.NoDocSum <> 0)and  T0.Doctype=''c''  and dbo.ocrd.cardType=''c''
and t4.MthDate is null  





')
                       AS derivedtbl_1





编辑:删除了喊叫。所有大写都是考虑在互联网上大喊大叫。



Removed Shouting. All upper case is consider shouting and rude in the internet.

推荐答案

我只是将你的查询复制并粘贴到Sql Server Management Studio中,让它解析查询。 />


这是错误:

消息103,级别15,状态1,行4

字符串以'

SELECT distinct'Bill'作为Type,T0.DocNum AS'Invoice',T1.DocNum AS'Receipt',T0.DocDate AS'InvoiceDt',T0.DocTotal'为太长。最大长度为8000.





问题是:查询中的字符串(或varchar)限制为8000个字符(或4000个字符) for nvarchar)

您尝试使用OPENQUERY运行的子查询包含超过8000个字符。因此,您需要编辑该查询,使其少于8000个字符。



解决此问题的可能方法:

- 拆分该查询多个较小的查询

- 在服务器上创建一个存储过程,在那里通过调用存储过程来替换查询的怪异
I just copy & pasted your query into Sql Server Management Studio and let it parse the query.

This is the error:
Msg 103, Level 15, State 1, Line 4
The character string that starts with '
SELECT distinct 'Bill' as Type, T0.DocNum AS'Invoice', T1.DocNum AS'Receipt', T0.DocDate AS'InvoiceDt',case when T0.DocTotal ' is too long. Maximum length is 8000.


The problem is: A string (or varchar) in a query is limited to 8000 characters (or 4000 for nvarchar)
The subquery you're trying to run with "OPENQUERY" contains more than those 8000 characters. So you need to edit that query to have fewer than those 8000 characters.

Possible ways to solve this issue:
- split that query into multiple smaller queries
- create a stored procedure on the server where you want to get that data from an replace that monstrosity of a query with a call to the stored procedure


这篇关于视图中最大长度为8000错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆