Sql server microsoft sql server management studio中的最大长度为8000

Sql server microsoft sql server management studio中的最大长度为8000,sql-server,ssms,Sql Server,Ssms,因此,在我的过程中发现了一个错误,OPENQUERY的查询字符串部分超过了8000个字符的最大定义限制。我能做什么 错误 以“select distinct UPPER(cast时大写)(i.attendantaddress为varchar(30))开头的字符串为空,则以“i.specialnotes else cast(i.attendantaddress)”开头的字符串太长。最大长度为8000-- 存储过程 CREATE procedure [dbo].[proc_GetFreePatien

因此,在我的过程中发现了一个错误,
OPENQUERY
的查询字符串部分超过了8000个字符的最大定义限制。我能做什么

错误

以“select distinct UPPER(cast时大写)(i.attendantaddress为varchar(30))开头的字符串为空,则以“i.specialnotes else cast(i.attendantaddress)”开头的字符串太长。最大长度为8000--

存储过程

CREATE procedure [dbo].[proc_GetFreePatients1_20apr]

as

declare @temp table(CONTROLNO varchar(max), UHID varchar(250),PATIENTNAME varchar(250),AGE INT,GENDER VARCHAR(1),ADRESS varchar(500),CONTACTNUMBER varchar(20),IPID varchar(20),BED varchar(20),REASONFORADMISSION varchar(max),DIAGNOSIS varchar(max),ADMITDATETIME datetime,DOCTOR varchar(150),

SPECIALITY varchar(500),REFERREDDOCTOR varchar(500),RECOMMENDEDBY varchar(500),EMERGENCYCOLDCASE varchar(500),WARD varchar(150))

insert @temp

select * from openquery(ahdelwards,'select distinct UPPER (case when cast(i.attendantaddress as varchar(30)) is null then i.specialnotes else cast(i.attendantaddress as varchar(30)) end) CONTROLNO,pm.registrationno,

      rp.firstname||'' ''||rp.middlename||'' ''||rp.lastname as Patientname,rp.age,

      (case when rp.gender=71 then ''F''

      else ''M'' end ) GENDER,

      ad.address1||'',''||ad.address2||'',''||c.cityname||'',''||sm.statename ADRESS,

(case when ad.residencenumber is null then

(case  when ad.emergencynumber is null then ad.mobilenumber

when ad.emergencynumber is not null then ad.emergencynumber

  when ad.mobilenumber is null then ad.emergencynumber

       when ad.mobilenumber is not null then ad.mobilenumber end) else ad.residencenumber end) CONTACTNUMBER,

i.inpatientno,

bm.bedcode,

I.REASONFORADMISSION,

(select dt.parametervalue

    from wards.dischargesummdtls dt

   where dt.parammappingid in

         (select pm.parammappingid

from wards.parametermapping pm

           where pm.parameterid = 1299)

     and dt.status = 1

     and dt.dischargeno in

         (select dy.dischargeno

from wards.dischargesumm_dync dy

           where dy.ipno = i.inpatientno)) diagnosis,

i.dateofadmission,

       e.FIRSTNAME||'' ''||e.MIDDLENAME||'' ''||e.LASTNAME as doctor,

     f_getspeciality(i.admittingdoctor)Speciality,

         f_getemployeename(i.referreddoctor)referreddoctor,

          UPPER(i.wardnurse) RECOMMENDEDBY,

          UPPER(i.housekeeping) EMERGENCYCOLDCASE,

l.leveldetailname

  from billing.pateintpolicydetails pd

  left join billing.patientpolicymaster pm

    on pd.policymasterid = pm.patientpolicymasterid

   and pd.policystatus = 1

   and pd.aggrementid = 60429

  join adt.inpatientmaster i

    on i.uhid = pm.registrationno

  join registration.patient rp

    on rp.uhid = i.uhid

    join

registration.addressmaster ad  on rp.registrationid=ad.registrationid and ad.addresstypeid=''2'' and ad.status=''1''

inner join

ehis.countrymaster cm on cm.countrycode=ad.country

inner join

ehis.statemaster sm on sm.statecode=ad.state and sm.status=''1''  

inner join 

ehis.districtmaster dm on dm.districtcode=ad.district and dm.status=''1'' and dm.stateid=sm.stateid

inner join 

ehis.citymaster c on c.citycode=ad.city and  c.status=''1''  and  c.districtid=dm.districtid

  join adt.bedmaster bm

    on bm.bedid = i.bedid

  join hr.employee_main_details e

    on e.employeeid = i.admittingdoctor

  join adt.leveldetail l

    on l.leveldetailid = bm.leveldetailid

where pm.locationid = 10701

   and i.locationid = 10701

   and i.status not in (7,11) 

union

select distinct UPPER (case when cast(i.attendantaddress as varchar(30)) is null then i.specialnotes else cast(i.attendantaddress as varchar(30)) end) CONTROLNO,pm.registrationno,

rp.firstname||'' ''||rp.middlename||'' ''||rp.lastname as Patientname,rp.age,      (case when rp.gender=71 then ''F''

      else ''M'' end ) GENDER,

ad.address1||'',''||ad.address2||'',''||c.cityname||'',''||sm.statename ADRESS,

(case when ad.residencenumber is null then



(case  when ad.emergencynumber is null then ad.mobilenumber

when ad.emergencynumber is not null then ad.emergencynumber

  when ad.mobilenumber is null then ad.emergencynumber

       when ad.mobilenumber is not null then ad.mobilenumber end) else ad.residencenumber end) CONTACTNUMBER,i.inpatientno,

bm.bedcode,

I.REASONFORADMISSION,

(select dt.parametervalue

    from wards.dischargesummdtls dt

   where dt.parammappingid in

         (select pm.parammappingid

from wards.parametermapping pm

           where pm.parameterid = 1299)

     and dt.status = 1

     and dt.dischargeno in

         (select dy.dischargeno

from wards.dischargesumm_dync dy

           where dy.ipno = i.inpatientno)) diagnosis,

i.dateofadmission,

e.FIRSTNAME||'' ''||e.MIDDLENAME||'' ''||e.LASTNAME as doctor,

   f_getspeciality(i.admittingdoctor)Speciality,

    f_getemployeename(i.referreddoctor)referreddoctor,

        UPPER(i.wardnurse) RECOMMENDEDBY,

          UPPER(i.housekeeping) EMERGENCYCOLDCASE,

l.leveldetailname

  from billing.pateintpolicydetails pd

  full outer join billing.patientpolicymaster pm

    on pd.policymasterid = pm.patientpolicymasterid

   and pd.policystatus = 1

  join adt.inpatientmaster i

    on i.uhid = pm.registrationno

  join registration.patient rp

    on rp.uhid = i.uhid

join

registration.addressmaster ad  on rp.registrationid=ad.registrationid and ad.addresstypeid=''2'' and ad.status=''1''

inner join

ehis.countrymaster cm on cm.countrycode=ad.country

inner join

ehis.statemaster sm on sm.statecode=ad.state and sm.status=''1''  

inner join 

ehis.districtmaster dm on dm.districtcode=ad.district and dm.status=''1'' and dm.stateid=sm.stateid

inner join 

ehis.citymaster c on c.citycode=ad.city and  c.status=''1''  and  c.districtid=dm.districtid

  join adt.bedmaster bm

    on bm.bedid = i.bedid

  join hr.employee_main_details e

    on e.employeeid = i.admittingdoctor

  join adt.leveldetail l

    on l.leveldetailid = bm.leveldetailid

   and l.leveldetailid not in (221,257)

where i.freepatient = 1

   and pm.locationid = 10701

   and i.locationid = 10701

   and i.status not in (7,11) 

union

select distinct  UPPER (case when cast(i.attendantaddress as varchar(30)) is null then i.specialnotes else cast(i.attendantaddress as varchar(30)) end) CONTROLNO,pm.registrationno,

rp.firstname||'' ''||rp.middlename||'' ''||rp.lastname as Patientname,rp.age, (case when rp.gender=71 then ''F''

      else ''M'' end ) GENDER,



ad.address1||'',''||ad.address2||'',''||c.cityname||'',''||sm.statename ADRESS,

(case when ad.residencenumber is null then

(case  when ad.emergencynumber is null then ad.mobilenumber

when ad.emergencynumber is not null then ad.emergencynumber

  when ad.mobilenumber is null then ad.emergencynumber

       when ad.mobilenumber is not null then ad.mobilenumber end) else ad.residencenumber end) CONTACTNUMBER,

i.inpatientno,

bm.bedcode,

I.REASONFORADMISSION,

(select dt.parametervalue

    from wards.dischargesummdtls dt

   where dt.parammappingid in

         (select pm.parammappingid

from wards.parametermapping pm

           where pm.parameterid = 1299)

     and dt.status = 1

     and dt.dischargeno in

         (select dy.dischargeno

from wards.dischargesumm_dync dy

           where dy.ipno = i.inpatientno)) diagnosis,

i.dateofadmission,

   e.FIRSTNAME||'' ''||e.MIDDLENAME||'' ''||e.LASTNAME as doctor,

      f_getspeciality(i.admittingdoctor)Speciality,

      f_getemployeename(i.referreddoctor)referreddoctor,

          UPPER(i.wardnurse) RECOMMENDEDBY,

          UPPER(i.housekeeping) EMERGENCYCOLDCASE,

l.leveldetailname

  from billing.pateintpolicydetails pd

  full outer join billing.patientpolicymaster pm

    on pd.policymasterid = pm.patientpolicymasterid

   and pd.policystatus = 1

  join adt.inpatientmaster i

    on i.uhid = pm.registrationno

  join registration.patient rp

    on rp.uhid = i.uhid

join

registration.addressmaster ad  on rp.registrationid=ad.registrationid and ad.addresstypeid=''2'' and ad.status=''1''

inner join

ehis.countrymaster cm on cm.countrycode=ad.country

inner join

ehis.statemaster sm on sm.statecode=ad.state and sm.status=''1''  

inner join 

ehis.districtmaster dm on dm.districtcode=ad.district and dm.status=''1'' and dm.stateid=sm.stateid

inner join 

ehis.citymaster c on c.citycode=ad.city and  c.status=''1''  and  c.districtid=dm.districtid

  join adt.bedmaster bm

   on bm.bedid = i.bedid

  join hr.employee_main_details e

    on e.employeeid = i.admittingdoctor

  join adt.leveldetail l

    on l.leveldetailid = bm.leveldetailid

   and l.leveldetailid in (221,257)

where i.freepatient = 1

   and pm.locationid = 10701

   and i.locationid = 10701

   and i.status not in (7,11)

 ')



--pd.aggrementid IN (60429,7140)



select  distinct * from @temp order by 11 asc

thx需要这个-虽然在链接服务器上执行时我需要将@strSQL封装在()中thx需要这个-虽然在链接服务器上执行时我需要将@strSQL封装在()中
Declare @strSQL varchar(max)
set @strSQL = N'<your query here>'

exec @strSQL at <YourLinkedServerName>
CREATE PROCEDURE [dbo].[proc_GetFreePatients1_20apr]
AS
BEGIN
DECLARE @temp TABLE(CONTROLNO varchar(max), UHID varchar(250),PATIENTNAME varchar(250),AGE INT,GENDER VARCHAR(1),ADRESS varchar(500),
                    CONTACTNUMBER varchar(20),IPID varchar(20),BED varchar(20),REASONFORADMISSION varchar(max),DIAGNOSIS varchar(max),
                    ADMITDATETIME datetime,DOCTOR varchar(150),SPECIALITY varchar(500),REFERREDDOCTOR varchar(500),RECOMMENDEDBY varchar(500),
                    EMERGENCYCOLDCASE varchar(500),WARD varchar(150))

DECLARE @strSQL VARCHAR(MAX)
SET @strSQL = N'SELECT DISTINCT Upper ( 
                CASE 
                                WHEN Cast(i.attendantaddress AS VARCHAR(30)) IS NULL THEN i.specialnotes
                                ELSE Cast(i.attendantaddress AS VARCHAR(30)) 
                END) controlno, 
                pm.registrationno, 
                rp.firstname 
                                ||'' '' 
                                ||rp.middlename 
                                ||'' '' 
                                ||rp.lastname AS patientname, 
                rp.age, ( 
                CASE 
                                WHEN rp.gender=71 THEN ''f'' 
                                ELSE ''m'' 
                END ) gender, 
                ad.address1 
                                ||'', 
                '' 
                                ||ad.address2 
                                ||'', 
                '' 
                                ||c.cityname 
                                ||'', 
                '' 
                                ||sm.statename adress, ( 
                CASE 
                                WHEN ad.residencenumber IS NULL THEN ( 
                                                CASE 
                                                                WHEN ad.emergencynumber IS NULL THEN ad.mobilenumber
                                                                WHEN ad.emergencynumber IS NOT NULL THEN ad.emergencynumber
                                                                WHEN ad.mobilenumber IS NULL THEN ad.emergencynumber
                                                                WHEN ad.mobilenumber IS NOT NULL THEN ad.mobilenumber
                                                END) 
                                ELSE ad.residencenumber 
                END) contactnumber, 
                i.inpatientno, 
                bm.bedcode, 
                i.reasonforadmission, 
                ( 
                       SELECT dt.parametervalue 
                       FROM   wards.dischargesummdtls dt 
                       WHERE  dt.parammappingid IN 
                              ( 
                                     SELECT pm.parammappingid 
                                     FROM   wards.parametermapping pm 
                                     WHERE  pm.parameterid = 1299) 
                       AND    dt.status = 1 
                       AND    dt.dischargeno IN 
                              ( 
                                     SELECT dy.dischargeno 
                                     FROM   wards.dischargesumm_dync dy 
                                     WHERE  dy.ipno = i.inpatientno)) diagnosis, 
                i.dateofadmission, 
                e.firstname 
                                ||'' '' 
                                ||e.middlename 
                                ||'' '' 
                                ||e.lastname       AS doctor, 
                f_getspeciality(i.admittingdoctor)    speciality, 
                f_getemployeename(i.referreddoctor)   referreddoctor, 
                upper(i.wardnurse)                    recommendedby, 
                upper(i.housekeeping)                 emergencycoldcase, 
                l.leveldetailname 
        FROM            billing.pateintpolicydetails pd 
        LEFT JOIN       billing.patientpolicymaster pm 
        ON              pd.policymasterid = pm.patientpolicymasterid 
        AND             pd.policystatus = 1 
        AND             pd.aggrementid = 60429 
        JOIN            adt.inpatientmaster i 
        ON              i.uhid = pm.registrationno 
        JOIN            registration.patient rp 
        ON              rp.uhid = i.uhid 
        JOIN            registration.addressmaster ad 
        ON              rp.registrationid=ad.registrationid 
        AND             ad.addresstypeid=''2'' 
        AND             ad.status=''1'' 
        INNER JOIN      ehis.countrymaster cm 
        ON              cm.countrycode=ad.country 
        INNER JOIN      ehis.statemaster sm 
        ON              sm.statecode=ad.state 
        AND             sm.status=''1'' 
        INNER JOIN      ehis.districtmaster dm 
        ON              dm.districtcode=ad.district 
        AND             dm.status=''1'' 
        AND             dm.stateid=sm.stateid 
        INNER JOIN      ehis.citymaster c 
        ON              c.citycode=ad.city 
        AND             c.status=''1'' 
        AND             c.districtid=dm.districtid 
        JOIN            adt.bedmaster bm 
        ON              bm.bedid = i.bedid 
        JOIN            hr.employee_main_details e 
        ON              e.employeeid = i.admittingdoctor 
        JOIN            adt.leveldetail l 
        ON              l.leveldetailid = bm.leveldetailid 
        WHERE           pm.locationid = 10701 
        AND             i.locationid = 10701 
        AND             i.status NOT IN (7,11) 
        UNION 
        SELECT DISTINCT upper ( 
                CASE 
                                WHEN cast(i.attendantaddress AS varchar(30)) IS NULL THEN i.specialnotes
                                ELSE cast(i.attendantaddress AS varchar(30)) 
                END) controlno, 
                pm.registrationno, 
                rp.firstname 
                                ||'' '' 
                                ||rp.middlename 
                                ||'' '' 
                                ||rp.lastname AS patientname, 
                rp.age, ( 
                CASE 
                                WHEN rp.gender=71 THEN ''f'' 
                                ELSE ''m'' 
                END ) gender, 
                ad.address1 
                                ||'', 
                '' 
                                ||ad.address2 
                                ||'', 
                '' 
                                ||c.cityname 
                                ||'', 
                '' 
                                ||sm.statename adress, ( 
                CASE 
                                WHEN ad.residencenumber IS NULL THEN ( 
                                                CASE 
                                                                WHEN ad.emergencynumber IS NULL THEN ad.mobilenumber
                                                                WHEN ad.emergencynumber IS NOT NULL THEN ad.emergencynumber
                                                                WHEN ad.mobilenumber IS NULL THEN ad.emergencynumber
                                                                WHEN ad.mobilenumber IS NOT NULL THEN ad.mobilenumber
                                                END) 
                                ELSE ad.residencenumber 
                END) contactnumber, 
                i.inpatientno, 
                bm.bedcode, 
                i.reasonforadmission, 
                ( 
                       SELECT dt.parametervalue 
                       FROM   wards.dischargesummdtls dt 
                       WHERE  dt.parammappingid IN 
                              ( 
                                     SELECT pm.parammappingid 
                                     FROM   wards.parametermapping pm 
                                     WHERE  pm.parameterid = 1299) 
                       AND    dt.status = 1 
                       AND    dt.dischargeno IN 
                              ( 
                                     SELECT dy.dischargeno 
                                     FROM   wards.dischargesumm_dync dy 
                                     WHERE  dy.ipno = i.inpatientno)) diagnosis, 
                i.dateofadmission, 
                e.firstname 
                                ||'' '' 
                                ||e.middlename 
                                ||'' '' 
                                ||e.lastname       AS doctor, 
                f_getspeciality(i.admittingdoctor)    speciality, 
                f_getemployeename(i.referreddoctor)   referreddoctor, 
                upper(i.wardnurse)                    recommendedby, 
                upper(i.housekeeping)                 emergencycoldcase, 
                l.leveldetailname 
        FROM            billing.pateintpolicydetails pd 
        FULL OUTER JOIN billing.patientpolicymaster pm 
        ON              pd.policymasterid = pm.patientpolicymasterid 
        AND             pd.policystatus = 1 
        JOIN            adt.inpatientmaster i 
        ON              i.uhid = pm.registrationno 
        JOIN            registration.patient rp 
        ON              rp.uhid = i.uhid 
        JOIN            registration.addressmaster ad 
        ON              rp.registrationid=ad.registrationid 
        AND             ad.addresstypeid=''2'' 
        AND             ad.status=''1'' 
        INNER JOIN      ehis.countrymaster cm 
        ON              cm.countrycode=ad.country 
        INNER JOIN      ehis.statemaster sm 
        ON              sm.statecode=ad.state 
        AND             sm.status=''1'' 
        INNER JOIN      ehis.districtmaster dm 
        ON              dm.districtcode=ad.district 
        AND             dm.status=''1'' 
        AND             dm.stateid=sm.stateid 
        INNER JOIN      ehis.citymaster c 
        ON              c.citycode=ad.city 
        AND             c.status=''1'' 
        AND             c.districtid=dm.districtid 
        JOIN            adt.bedmaster bm 
        ON              bm.bedid = i.bedid 
        JOIN            hr.employee_main_details e 
        ON              e.employeeid = i.admittingdoctor 
        JOIN            adt.leveldetail l 
        ON              l.leveldetailid = bm.leveldetailid 
        AND             l.leveldetailid NOT IN (221,257) 
        WHERE           i.freepatient = 1 
        AND             pm.locationid = 10701 
        AND             i.locationid = 10701 
        AND             i.status NOT IN (7,11) 
        UNION 
        SELECT DISTINCT upper ( 
                CASE 
                                WHEN cast(i.attendantaddress AS varchar(30)) IS NULL THEN i.specialnotes
                                ELSE cast(i.attendantaddress AS varchar(30)) 
                END) controlno, 
                pm.registrationno, 
                rp.firstname 
                                ||'' '' 
                                ||rp.middlename 
                                ||'' '' 
                                ||rp.lastname AS patientname, 
                rp.age, ( 
                CASE 
                                WHEN rp.gender=71 THEN ''f'' 
                                ELSE ''m'' 
                END ) gender, 
                ad.address1 
                                ||'', 
                '' 
                                ||ad.address2 
                                ||'', 
                '' 
                                ||c.cityname 
                                ||'', 
                '' 
                                ||sm.statename adress, ( 
                CASE 
                                WHEN ad.residencenumber IS NULL THEN ( 
                                                CASE 
                                                                WHEN ad.emergencynumber IS NULL THEN ad.mobilenumber
                                                                WHEN ad.emergencynumber IS NOT NULL THEN ad.emergencynumber
                                                                WHEN ad.mobilenumber IS NULL THEN ad.emergencynumber
                                                                WHEN ad.mobilenumber IS NOT NULL THEN ad.mobilenumber
                                                END) 
                                ELSE ad.residencenumber 
                END) contactnumber, 
                i.inpatientno, 
                bm.bedcode, 
                i.reasonforadmission, 
                ( 
                       SELECT dt.parametervalue 
                       FROM   wards.dischargesummdtls dt 
                       WHERE  dt.parammappingid IN 
                              ( 
                                     SELECT pm.parammappingid 
                                     FROM   wards.parametermapping pm 
                                     WHERE  pm.parameterid = 1299) 
                       AND    dt.status = 1 
                       AND    dt.dischargeno IN 
                              ( 
                                     SELECT dy.dischargeno 
                                     FROM   wards.dischargesumm_dync dy 
                                     WHERE  dy.ipno = i.inpatientno)) diagnosis, 
                i.dateofadmission, 
                e.firstname 
                                ||'' '' 
                                ||e.middlename 
                                ||'' '' 
                                ||e.lastname       AS doctor, 
                f_getspeciality(i.admittingdoctor)    speciality, 
                f_getemployeename(i.referreddoctor)   referreddoctor, 
                upper(i.wardnurse)                    recommendedby, 
                upper(i.housekeeping)                 emergencycoldcase, 
                l.leveldetailname 
            FROM            billing.pateintpolicydetails pd 
            FULL OUTER JOIN billing.patientpolicymaster pm 
            ON              pd.policymasterid = pm.patientpolicymasterid 
            AND             pd.policystatus = 1 
            JOIN            adt.inpatientmaster i 
            ON              i.uhid = pm.registrationno 
            JOIN            registration.patient rp 
            ON              rp.uhid = i.uhid 
            JOIN            registration.addressmaster ad 
            ON              rp.registrationid=ad.registrationid 
            AND             ad.addresstypeid=''2'' 
            AND             ad.status=''1'' 
            INNER JOIN      ehis.countrymaster cm 
            ON              cm.countrycode=ad.country 
            INNER JOIN      ehis.statemaster sm 
            ON              sm.statecode=ad.state 
            AND             sm.status=''1'' 
            INNER JOIN      ehis.districtmaster dm 
            ON              dm.districtcode=ad.district 
            AND             dm.status=''1'' 
            AND             dm.stateid=sm.stateid 
            INNER JOIN      ehis.citymaster c 
            ON              c.citycode=ad.city 
            AND             c.status=''1'' 
            AND             c.districtid=dm.districtid 
            JOIN            adt.bedmaster bm 
            ON              bm.bedid = i.bedid 
            JOIN            hr.employee_main_details e 
            ON              e.employeeid = i.admittingdoctor 
            JOIN            adt.leveldetail l 
            ON              l.leveldetailid = bm.leveldetailid 
            AND             l.leveldetailid IN (221,257) 
            WHERE           i.freepatient = 1 
            AND             pm.locationid = 10701 
            AND             i.locationid = 10701 
            AND             i.status NOT IN (7,11)'

    INSERT @temp
    SELECT * FROM OPENQUERY(ahdelwards,@strSQL)

    SELECT DISTINCT * FROM @temp ORDER BY 11 ASC
END