ORA-01407: cannot update ("SYSADM"."PS_N_CERTMOD_TAO4"."DATE_CHAR") to NULL Failed SQL stmt: /*UPDATE - peoplesoft

Error Message: ORA-01407: cannot update
("SYSADM"."PS_N_CERTMOD_TAO4"."DATE_CHAR") to NULL Failed SQL stmt: /*UPDATE
When i am generating the report it is saying NO Success in Peoplesoft.
Below is the code which for Update statement.
Please help me how to overcome from this problem.
Thanks in Advance.
UPDATE %Table(N_CERTMOD_TAO) TMP
SET TMP.DATE_CHAR = ( CASE WHEN EXISTS(
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = TMP.ACAD_PLAN ) THEN (
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = TMP.ACAD_PLAN ) ELSE (CASE WHEN EXISTS(
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = ' ') THEN (
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = ' ') ELSE ( CASE WHEN EXISTS (
SELECT B.A_EXAM_SEM_DT
FROM PS_A_XM_WRES_DTT_P B
WHERE B.INSTITUTION = TMP.INSTITUTION
AND B.ACAD_CAREER = TMP.ACAD_CAREER
AND B.STRM = TMP.COMPLETION_TERM
AND B.ACAD_PROG = TMP.ACAD_PROG
AND B.ACAD_PLAN = TMP.ACAD_PLAN) THEN (
SELECT TO_CHAR(B.A_EXAM_SEM_DT)
FROM PS_A_XM_WRES_DTT_P B
WHERE B.INSTITUTION = TMP.INSTITUTION
AND B.ACAD_CAREER = TMP.ACAD_CAREER
AND B.STRM = TMP.COMPLETION_TERM
AND B.ACAD_PROG = TMP.ACAD_PROG
AND B.ACAD_PLAN = TMP.ACAD_PLAN) ELSE (
SELECT TO_CHAR(C.A_EXAM_SEM_DT)
FROM PS_A_EXAM_WRES_DTT C
WHERE C.INSTITUTION = TMP.INSTITUTION
AND C.ACAD_CAREER = TMP.ACAD_CAREER
AND C.STRM = TMP.COMPLETION_TERM
AND C.ACAD_PROG = TMP.ACAD_PROG ) END ) END ) END)

First part of correction is proposed by Jared.
I think C.A_EXAM_SEM_DT could be null as well, so you should change TO_CHAR(C.A_EXAM_SEM_DT) to NVL(TO_CHAR(C.A_EXAM_SEM_DT), ' '
Consider of simplifying the statement, something like
UPDATE %Table(N_CERTMOD_TAO) TMP
SET TMP.DATE_CHAR =
(select nvl(A.descr254, --no value? -->
nvl(AA.descr254, -- no value? -->
nvl(TO_CHAR(B.A_EXAM_SEM_DT), -- no value? -->
nvl(TO_CHAR(C.A_EXAM_SEM_DT), -- no value? -->
' ')))) -- default value
from dual D
left outer join PS_N_CERTMONYR_DTL A
on (A.INSTITUTION = TMP.INSTITUTION AND
A.ACAD_CAREER = TMP.ACAD_CAREER AND
A.STRM = TMP.COMPLETION_TERM AND
A.ACAD_PROG = TMP.ACAD_PROG AND
A.ACAD_PLAN = TMP.ACAD_PLAN)
left outer join PS_N_CERTMONYR_DTL AA
on (AA.INSTITUTION = TMP.INSTITUTION AND
AA.ACAD_CAREER = TMP.ACAD_CAREER AND
AA.STRM = TMP.COMPLETION_TERM AND
AA.ACAD_PROG = TMP.ACAD_PROG AND AA.ACAD_PLAN = ' ')
left outer join PS_A_XM_WRES_DTT_P B
on (B.INSTITUTION = TMP.INSTITUTION AND
B.ACAD_CAREER = TMP.ACAD_CAREER AND
B.STRM = TMP.COMPLETION_TERM AND
B.ACAD_PROG = TMP.ACAD_PROG AND
B.ACAD_PLAN = TMP.ACAD_PLAN)
left outer join PS_A_EXAM_WRES_DTT C
on (C.INSTITUTION = TMP.INSTITUTION AND
C.ACAD_CAREER = TMP.ACAD_CAREER AND
C.STRM = TMP.COMPLETION_TERM AND
C.ACAD_PROG = TMP.ACAD_PROG));

You need a final case condition so that if its going to be null it returns a ' ' instead.
UPDATE %Table(N_CERTMOD_TAO) TMP
SET TMP.DATE_CHAR = ( CASE
WHEN EXISTS(
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = TMP.ACAD_PLAN )
THEN (
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = TMP.ACAD_PLAN )
ELSE ( CASE
WHEN EXISTS(
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = ' ')
THEN (
SELECT A.descr254
FROM PS_N_CERTMONYR_DTL A
WHERE A.INSTITUTION = TMP.INSTITUTION
AND A.ACAD_CAREER = TMP.ACAD_CAREER
AND A.STRM = TMP.COMPLETION_TERM
AND A.ACAD_PROG = TMP.ACAD_PROG
AND A.ACAD_PLAN = ' ')
ELSE ( CASE
WHEN EXISTS (
SELECT B.A_EXAM_SEM_DT
FROM PS_A_XM_WRES_DTT_P B
WHERE B.INSTITUTION = TMP.INSTITUTION
AND B.ACAD_CAREER = TMP.ACAD_CAREER
AND B.STRM = TMP.COMPLETION_TERM
AND B.ACAD_PROG = TMP.ACAD_PROG
AND B.ACAD_PLAN = TMP.ACAD_PLAN)
THEN (
SELECT TO_CHAR(B.A_EXAM_SEM_DT)
FROM PS_A_XM_WRES_DTT_P B
WHERE B.INSTITUTION = TMP.INSTITUTION
AND B.ACAD_CAREER = TMP.ACAD_CAREER
AND B.STRM = TMP.COMPLETION_TERM
AND B.ACAD_PROG = TMP.ACAD_PROG
AND B.ACAD_PLAN = TMP.ACAD_PLAN)
ELSE ( CASE
WHEN EXISTS(
SELECT TO_CHAR(C.A_EXAM_SEM_DT)
FROM PS_A_EXAM_WRES_DTT C
WHERE C.INSTITUTION = TMP.INSTITUTION
AND C.ACAD_CAREER = TMP.ACAD_CAREER
AND C.STRM = TMP.COMPLETION_TERM
AND C.ACAD_PROG = TMP.ACAD_PROG )
THEN (
SELECT TO_CHAR(C.A_EXAM_SEM_DT)
FROM PS_A_EXAM_WRES_DTT C
WHERE C.INSTITUTION = TMP.INSTITUTION
AND C.ACAD_CAREER = TMP.ACAD_CAREER
AND C.STRM = TMP.COMPLETION_TERM
AND C.ACAD_PROG = TMP.ACAD_PROG )
ELSE
' '
END )
END )
END )
END)

Related

Capturing Time Difference Between Statuses via DAX

I am working in PowerBI and I have a dataset showing candidate movement within hiring requisitions. Via DAX, I would like to add columns that show the time difference between certain statuses. E.g., the result would show "3" down the column for "New to Hire" and so on.
You can do this using three measures. You will need to adjust Table3 to reflect your actual table name. I also assumed that there is a column that designates a unique ID for each employee.
New to Hire:
New to Hire :=
VAR CurID =
MAX ( Table3[ID] )
VAR NewDate =
CALCULATE (
FIRSTDATE ( Table3[Date] ),
FILTER ( ALL ( Table3 ), Table3[ID] = CurID && Table3[Status] = "New" )
)
VAR HireDate =
CALCULATE (
FIRSTDATE ( Table3[Date] ),
FILTER ( ALL ( Table3 ), Table3[ID] = CurID && Table3[Status] = "Hired" )
)
RETURN
DATEDIFF ( NewDate, HireDate, DAY )
Offer to Accept:
Offer to Acccept :=
VAR CurID =
MAX ( Table3[ID] )
VAR OfferDate =
CALCULATE (
FIRSTDATE ( Table3[Date] ),
FILTER ( ALL ( Table3 ), Table3[ID] = CurID && Table3[Status] = "Offer Sent" )
)
VAR AcceptDate =
CALCULATE (
FIRSTDATE ( Table3[Date] ),
FILTER ( ALL ( Table3 ), Table3[ID] = CurID && Table3[Status] = "Offer Accepted" )
)
RETURN
DATEDIFF ( OfferDate, AcceptDate, DAY )
Offer to Hire
Offer to Hire :=
VAR CurID =
MAX ( Table3[ID] )
VAR OfferDate =
CALCULATE (
FIRSTDATE ( Table3[Date] ),
FILTER ( ALL ( Table3 ), Table3[ID] = CurID && Table3[Status] = "Offer Sent" )
)
VAR HireDate =
CALCULATE (
LASTDATE ( Table3[Date] ),
FILTER ( ALL ( Table3 ), Table3[ID] = CurID && Table3[Status] = "Hired" )
)
RETURN
DATEDIFF ( OfferDate, HireDate, DAY )

PeopleSoft Subquery not picking up correct leave plans

I'm attempting to build a report in PeopleSoft's Query Manager that has future and current employees on it. I want to be able to find the employees who do not have leave plans, specifically 50 and 52. I thought I was on the right track with the following BUT after auditing my report it is bringing in people who HAVE 50 and 52. I think it has to do with the subquery (SQL below).
Here are some pictures of query manager:
SELECT DISTINCT B.COMPANY, A.EMPLID, A.NAME, B.FULL_PART_TIME, B.REG_TEMP, C.DESCR, D.PLAN_TYPE, (CASE WHEN B.REG_TEMP = 'T' THEN '' WHEN C.DESCR = 'Intern' THEN '' WHEN C.DESCR = 'PenFed Intern' THEN '' ELSE 'Check records/give Leave' END), CONVERT(CHAR(10),SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10),121)), (CONVERT(CHAR(10),SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10),121)), (CONVERT(CHAR(10),SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10),121))
FROM (PS_PERSONAL_DATA A LEFT OUTER JOIN (PS_LEAVE_PLAN D INNER JOIN PS_EMPLMT_SRCH_QRY D1 ON (D.EMPLID = D1.EMPLID AND D.EMPL_RCD = D1.EMPL_RCD AND D1.OPRID = 'XXXXXXXX' )) ON A.EMPLID = D.EMPLID ), PS_PFC_JOB_VW B, PS_JOBCODE_TBL C, PS_SET_CNTRL_REC C2
WHERE ( C.JOBCODE = B.JOBCODE
AND C2.SETCNTRLVALUE = B.BUSINESS_UNIT
AND C2.RECNAME = 'JOBCODE_TBL'
AND C2.SETID = C.SETID
AND ( A.EMPLID = B.EMPLID
AND ( B.EFFDT =
(SELECT MAX(B_ED.EFFDT) FROM PS_PFC_JOB_VW B_ED
WHERE B.EMPLID = B_ED.EMPLID
AND B.EMPL_RCD = B_ED.EMPL_RCD
AND B_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND B.EFFSEQ =
(SELECT MAX(B_ES.EFFSEQ) FROM PS_PFC_JOB_VW B_ES
WHERE B.EMPLID = B_ES.EMPLID
AND B.EMPL_RCD = B_ES.EMPL_RCD
AND B.EFFDT = B_ES.EFFDT)
OR ( B.EFFDT =
(SELECT MIN(B_ED.EFFDT) FROM PS_PFC_JOB_VW B_ED
WHERE B.EMPLID = B_ED.EMPLID
AND B.EMPL_RCD = B_ED.EMPL_RCD
AND B_ED.EFFDT >= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND B.EFFSEQ =
(SELECT MAX(B_ES.EFFSEQ) FROM PS_PFC_JOB_VW B_ES
WHERE B.EMPLID = B_ES.EMPLID
AND B.EMPL_RCD = B_ES.EMPL_RCD
AND B.EFFDT = B_ES.EFFDT)
AND B.ACTION IN ('HIR','REH','REI')))
AND B.EMPL_STATUS IN ('A','L','P')
AND B.PER_ORG = 'EMP'
AND C.EFFDT =
(SELECT MAX(C_ED.EFFDT) FROM PS_JOBCODE_TBL C_ED
WHERE C.SETID = C_ED.SETID
AND C.JOBCODE = C_ED.JOBCODE
AND C_ED.EFFDT <= B.EFFDT)
AND A.EMPLID NOT IN (SELECT E.EMPLID
FROM PS_LEAVE_PLAN E, PS_EMPLMT_SRCH_QRY E1
WHERE E.EMPLID = E1.EMPLID
AND E.EMPL_RCD = E1.EMPL_RCD
AND E1.OPRID = 'XXXXXXXX'
AND ( E.EFFDT =
(SELECT MAX(E_ED.EFFDT) FROM PS_LEAVE_PLAN E_ED
WHERE E.EMPLID = E_ED.EMPLID
AND E.EMPL_RCD = E_ED.EMPL_RCD
AND E.PLAN_TYPE = E_ED.PLAN_TYPE
AND E.BENEFIT_NBR = E_ED.BENEFIT_NBR
AND E_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND ( E.PLAN_TYPE = '50'
OR E.PLAN_TYPE = '52') )) ))
Where am I going wrong here?

Sql query to download order report in woocommerce

please help to complete this. I need to download order report of woocommerce in csv format, for that i made the following query:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
fputcsv($output, array('ID', 'Date', 'Status','Name'));
$rows = mysql_query('SELECT ID,post_date,post_status,post_name FROM wp_posts WHERE post_date LIKE "%2016-03-30%"');
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
And this is just a trail and here i only fetch data from post table.
But i need to connect to postmeta and other tables, so that i can get all information about order.
By searching on the internet i get the following code, but i don't know how to integrate with this with my code.
See the query for to get all order details:
select
p.ID as order_id,
p.post_date,
max( CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
max( CASE WHEN pm.meta_key = '_billing_first_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_first_name,
max( CASE WHEN pm.meta_key = '_billing_last_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_last_name,
max( CASE WHEN pm.meta_key = '_billing_address_1' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_address_1,
max( CASE WHEN pm.meta_key = '_billing_address_2' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_address_2,
max( CASE WHEN pm.meta_key = '_billing_city' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_city,
max( CASE WHEN pm.meta_key = '_billing_state' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_state,
max( CASE WHEN pm.meta_key = '_billing_postcode' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_postcode,
max( CASE WHEN pm.meta_key = '_shipping_first_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_first_name,
max( CASE WHEN pm.meta_key = '_shipping_last_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_last_name,
max( CASE WHEN pm.meta_key = '_shipping_address_1' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_address_1,
max( CASE WHEN pm.meta_key = '_shipping_address_2' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_address_2,
max( CASE WHEN pm.meta_key = '_shipping_city' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_city,
max( CASE WHEN pm.meta_key = '_shipping_state' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_state,
max( CASE WHEN pm.meta_key = '_shipping_postcode' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_postcode,
max( CASE WHEN pm.meta_key = '_order_total' and p.ID = pm.post_id THEN pm.meta_value END ) as order_total,
max( CASE WHEN pm.meta_key = '_order_tax' and p.ID = pm.post_id THEN pm.meta_value END ) as order_tax,
max( CASE WHEN pm.meta_key = '_paid_date' and p.ID = pm.post_id THEN pm.meta_value END ) as paid_date,
( select group_concat( order_item_name separator '|' ) from wp_woocommerce_order_items where order_id = p.ID ) as order_items
from
wp_posts as p,
wp_postmeta as pm
where
post_type = 'shop_order' and
p.ID = pm.post_id and
post_date BETWEEN '2015-01-01' AND '2015-07-08'
and post_status = 'wc-completed'
group by
p.ID
Please help to complete this, or is there any good method rather than this?
I don't want to use plugins.
Currently i have a plugin, but that is working slow, that's why i making this page.
Please help to solve this issue .
From my own blog post, this is the format for the SQL to extract information from an EAV style table layout.
$reportQuery = "
SELECT
A.ID as order_id
, B.meta_value as b_first_name
, C.meta_value as b_last_name
, D.meta_value as b_address_1
, E.meta_value as b_address_2
, F.meta_value as b_country
, G.meta_value as b_state
, H.meta_value as b_city
, I.meta_value as b_postcode
, J.meta_value as b_user_id
, K.user_email as b_email
FROM wp_posts as A
LEFT JOIN wp_postmeta B
ON A.id = B.post_id AND B.meta_key = '_billing_first_name'
LEFT JOIN wp_postmeta C
ON A.id = C.post_id AND C.meta_key = '_billing_last_name'
LEFT JOIN wp_postmeta D
ON A.id = D.post_id AND D.meta_key = '_billing_address_1'
LEFT JOIN wp_postmeta E
ON A.id = E.post_id AND E.meta_key = '_billing_address_2'
LEFT JOIN wp_postmeta F
ON A.id = F.post_id AND F.meta_key = '_billing_country'
LEFT JOIN wp_postmeta G
ON A.id = G.post_id AND G.meta_key = '_billing_state'
LEFT JOIN wp_postmeta H
ON A.id = H.post_id AND H.meta_key = '_billing_city'
LEFT JOIN wp_postmeta I
ON A.id = I.post_id AND I.meta_key = '_billing_postcode'
LEFT JOIN wp_postmeta J
ON A.id = J.post_id AND J.meta_key = '_customer_user'
LEFT JOIN wp_users K
ON J.meta_value = K.ID
WHERE A.post_type = 'shop_order'
AND A.post_status = 'wc-completed';
AND A.post_date_gmt >= DATE_SUB(NOW(), INTERVAL 1 DAY)
";
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=woocommerce-'.date('Y-m-d').'.csv');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
$rows = mysql_query($reportQuery);
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
fclose($output);

Attempted to divide by zero error on page load

Every time I load up a certain page, it gives out an error saying that I have attempted to divide by zero. After checking it, we found out that this only happens on our production link because we have published it on our local PC and it works just fine. Below is the query that we are using on the page:
SELECT DISTINCT *
FROM
(
SELECT c.containerid
,wldw.wafernumber "Wafer"
,wldd.wipdatavalue "Item Qty"
,iqty.wipdatavalue "Integrator Qty"
,nd.wipdatavalue "Net Die"
,tr.wipdatavalue "Total Rejects"
,vi.wipdatavalue "Visual Inspection"
,tpedispo.wipdatavalue "TPE Disposition"
,pa.wipdatavalue "Pre Align"
,pa.wipdatavalue "Post Visual"
, DECODE(NVL(iqty.wipdatavalue,0),0,0, ROUND((NVL(nd.wipdatavalue,0) / NVL(iqty.wipdatavalue,0)) * 100,2)) "Yield"
,comments.wipdatavalue "Comments"
,oper.wipdatavalue "Operator"
,pcwi.wipdatavalue "Inspector"
,engr.wipdatavalue "Engineer"
,wldw.waferstatus "Status"
,wl.wiplotid wiplothistoryid
,wl.wiptrackinggroupkeyid
,wl.specid
,wldw.wafersequence
,1 as withdrilldown
, gq.wipdatavalue WS_GROSSQTY
, gd.wipdatavalue WS_GOODDIE
, tq.wipdatavalue WS_TESTEDQTY
, wr.wipdatavalue WS_TOTALREJECTS
, vi.wipdatavalue WS_VISUALINSPECTION
, td.wipdatavalue WS_TPEDISPOSITION
, wc.wipdatavalue WS_COMMENTS
, oqa.wipdatavalue OQAREJECTTYPE
, wldd.wipdatanamename
FROM Container C
JOIN a_wiplot wl ON c.containerid = wl.containerid
JOIN a_wiplotdetails wld ON wl.wiplotid = wld.wiplotid
JOIN a_wiplotdetailswafers wldw ON wld.wiplotdetailsid = wldw.wiplotdetailsid
JOIN a_wiplotdetailsdata wldd ON wld.wiplotdetailsid = wldd.wiplotdetailsid AND wldd.waferscribenumber = wldw.waferscribenumber
LEFT JOIN a_wiplotdetailsdata nd ON wld.wiplotdetailsid = nd.wiplotdetailsid AND nd.waferscribenumber = wldw.waferscribenumber AND nd.wipdatanamename = 'WS_NET DIE'
LEFT JOIN a_wiplotdetailsdata iqty ON wld.wiplotdetailsid = iqty.wiplotdetailsid AND iqty.waferscribenumber = wldw.waferscribenumber AND iqty.wipdatanamename = 'WS_INTEGRATOR QTY'
LEFT JOIN a_wiplotdetailsdata tr ON wld.wiplotdetailsid = tr.wiplotdetailsid AND tr.waferscribenumber = wldw.waferscribenumber AND tr.wipdatanamename = 'WS_TOTAL REJECTS'
LEFT JOIN a_wiplotdetailsdata vi ON wld.wiplotdetailsid = vi.wiplotdetailsid AND vi.waferscribenumber = wldw.waferscribenumber AND vi.wipdatanamename = 'WS_VISUAL INSPECTION'
LEFT JOIN a_wiplotdetailsdata tpedispo ON wld.wiplotdetailsid = tpedispo.wiplotdetailsid AND tpedispo.waferscribenumber = wldw.waferscribenumber AND tpedispo.wipdatanamename = 'WS_TPE DISPOSITION'
LEFT JOIN a_wiplotdetailsdata pa ON wld.wiplotdetailsid = pa.wiplotdetailsid AND pa.waferscribenumber = wldw.waferscribenumber AND pa.wipdatanamename = 'WS_PRE ALIGN'
LEFT JOIN a_wiplotdetailsdata pv ON wld.wiplotdetailsid = pv.wiplotdetailsid AND pv.waferscribenumber = wldw.waferscribenumber AND pv.wipdatanamename = 'WS_POST VISUAL'
LEFT JOIN a_wiplotdetailsdata comments ON wld.wiplotdetailsid = comments.wiplotdetailsid AND comments.waferscribenumber = wldw.waferscribenumber AND comments.wipdatanamename = 'WS_COMMENTS'
LEFT JOIN a_wiplotdetailsdata oper ON wld.wiplotdetailsid = oper.wiplotdetailsid AND oper.waferscribenumber = wldw.waferscribenumber AND oper.wipdatanamename = 'WS_OPERATOR'
LEFT JOIN a_wiplotdetailsdata engr ON wld.wiplotdetailsid = engr.wiplotdetailsid AND engr.waferscribenumber = wldw.waferscribenumber AND engr.wipdatanamename = 'WS_ENGINEER'
LEFT JOIN a_wiplotdetailsdata pcwi ON wld.wiplotdetailsid = pcwi.wiplotdetailsid AND pcwi.waferscribenumber = wldw.waferscribenumber AND pcwi.wipdatanamename = 'WS_INSPECTOR'
LEFT JOIN a_wiplotdetailsdata gq ON wld.wiplotdetailsid = gq.wiplotdetailsid AND gq.waferscribenumber = wldw.waferscribenumber AND gq.wipdatanamename = 'WS_GROSS QTY'
LEFT JOIN a_wiplotdetailsdata gd ON wld.wiplotdetailsid = gd.wiplotdetailsid AND gd.waferscribenumber = wldw.waferscribenumber AND gd.wipdatanamename = 'WS_GOOD DIE'
LEFT JOIN a_wiplotdetailsdata tq ON wld.wiplotdetailsid = tq.wiplotdetailsid AND tq.waferscribenumber = wldw.waferscribenumber AND tq.wipdatanamename = 'WS_TESTED QTY/SAMPLE SIZE'
LEFT JOIN a_wiplotdetailsdata wr ON wld.wiplotdetailsid = wr.wiplotdetailsid AND wr.waferscribenumber = wldw.waferscribenumber AND wr.wipdatanamename = 'WS_TOTAL REJECTS'
LEFT JOIN a_wiplotdetailsdata vi ON wld.wiplotdetailsid = vi.wiplotdetailsid AND vi.waferscribenumber = wldw.waferscribenumber AND vi.wipdatanamename = 'WS_VISUAL INSPECTION'
LEFT JOIN a_wiplotdetailsdata td ON wld.wiplotdetailsid = td.wiplotdetailsid AND td.waferscribenumber = wldw.waferscribenumber AND td.wipdatanamename = 'WS_TPE DISPOSITION'
LEFT JOIN a_wiplotdetailsdata wc ON wld.wiplotdetailsid = wc.wiplotdetailsid AND wc.waferscribenumber = wldw.waferscribenumber AND wc.wipdatanamename = 'WS_COMMENTS'
LEFT JOIN a_wiplotdetailsdata oqa ON wld.wiplotdetailsid = oqa.wiplotdetailsid AND oqa.waferscribenumber = wldw.waferscribenumber AND oqa.wipdatanamename = 'FOR OQA_REJECT TYPE'
WHERE c.containername = :lotID AND wl.wiptrackinggroupkeyid = :ID AND wldd.iswaferdata = 1 AND wldd.wipdatanamename IN ('WS_ITEM QTY', 'WS_GROSS QTY')
UNION ALL
SELECT c.containerid
,wldw.wafernumber "Wafer"
,wldd.wipdatavalue "Item Qty"
,iqty.wipdatavalue "Integrator Qty"
,nd.wipdatavalue "Net Die"
,tr.wipdatavalue "Total Rejects"
,vi.wipdatavalue "Visual Inspection"
,tpedispo.wipdatavalue "TPE Disposition"
,pa.wipdatavalue "Pre Align"
,pa.wipdatavalue "Post Visual"
, DECODE(NVL(iqty.wipdatavalue,0),0,0, ROUND((NVL(nd.wipdatavalue,0) / NVL(iqty.wipdatavalue,0)) * 100,2)) "Yield"
,comments.wipdatavalue "Comments"
,oper.wipdatavalue "Operator"
,pcwi.wipdatavalue "Inspector"
,engr.wipdatavalue "Engineer"
,wldw.waferstatus "Status"
,wl.wiplothistoryid
,wl.wiptrackinggroupkeyid
,wl.specid
,wldw.wafersequence
,1 as withdrilldown
, gq.wipdatavalue WS_GROSSQTY
, gd.wipdatavalue WS_GOODDIE
, tq.wipdatavalue WS_TESTEDQTY
, wr.wipdatavalue WS_TOTALREJECTS
, vi.wipdatavalue WS_VISUALINSPECTION
, td.wipdatavalue WS_TPEDISPOSITION
, wc.wipdatavalue WS_COMMENTS
, oqa.wipdatavalue OQAREJECTTYPE
, wldd.wipdatanamename
FROM Container C
JOIN a_wiplothistory wl ON c.containerid = wl.containerid
JOIN a_wiplotdetailshistory wld ON wl.wiplothistoryid = wld.wiplothistoryid
JOIN a_wiplotdetailswafershistory wldw ON wld.wiplotdetailshistoryid = wldw.wiplotdetailshistoryid
JOIN a_wiplotdetailsdatahistory wldd ON wld.wiplotdetailshistoryid = wldd.wiplotdetailshistoryid AND wldd.waferscribenumber = wldw.waferscribenumber
LEFT JOIN a_wiplotdetailsdatahistory nd ON wld.wiplotdetailshistoryid = nd.wiplotdetailshistoryid AND nd.waferscribenumber = wldw.waferscribenumber AND nd.wipdatanamename = 'WS_NET DIE'
LEFT JOIN a_wiplotdetailsdatahistory iqty ON wld.wiplotdetailshistoryid = iqty.wiplotdetailshistoryid AND iqty.waferscribenumber = wldw.waferscribenumber AND iqty.wipdatanamename = 'WS_INTEGRATOR QTY'
LEFT JOIN a_wiplotdetailsdatahistory tr ON wld.wiplotdetailshistoryid = tr.wiplotdetailshistoryid AND tr.waferscribenumber = wldw.waferscribenumber AND tr.wipdatanamename = 'WS_TOTAL REJECTS'
LEFT JOIN a_wiplotdetailsdatahistory vi ON wld.wiplotdetailshistoryid = vi.wiplotdetailshistoryid AND vi.waferscribenumber = wldw.waferscribenumber AND vi.wipdatanamename = 'WS_VISUAL INSPECTION'
LEFT JOIN a_wiplotdetailsdatahistory tpedispo ON wld.wiplotdetailshistoryid = tpedispo.wiplotdetailshistoryid AND tpedispo.waferscribenumber = wldw.waferscribenumber AND tpedispo.wipdatanamename = 'WS_TPE DISPOSITION'
LEFT JOIN a_wiplotdetailsdatahistory pa ON wld.wiplotdetailshistoryid = pa.wiplotdetailshistoryid AND pa.waferscribenumber = wldw.waferscribenumber AND pa.wipdatanamename = 'WS_PRE ALIGN'
LEFT JOIN a_wiplotdetailsdatahistory pv ON wld.wiplotdetailshistoryid = pv.wiplotdetailshistoryid AND pv.waferscribenumber = wldw.waferscribenumber AND pv.wipdatanamename = 'WS_POST VISUAL'
LEFT JOIN a_wiplotdetailsdatahistory comments ON wld.wiplotdetailshistoryid = comments.wiplotdetailshistoryid AND comments.waferscribenumber = wldw.waferscribenumber AND comments.wipdatanamename = 'WS_COMMENTS'
LEFT JOIN a_wiplotdetailsdatahistory oper ON wld.wiplotdetailshistoryid = oper.wiplotdetailshistoryid AND oper.waferscribenumber = wldw.waferscribenumber AND oper.wipdatanamename = 'WS_OPERATOR'
LEFT JOIN a_wiplotdetailsdatahistory engr ON wld.wiplotdetailshistoryid = engr.wiplotdetailshistoryid AND engr.waferscribenumber = wldw.waferscribenumber AND engr.wipdatanamename = 'WS_ENGINEER'
LEFT JOIN a_wiplotdetailsdatahistory pcwi ON wld.wiplotdetailshistoryid = pcwi.wiplotdetailshistoryid AND pcwi.waferscribenumber = wldw.waferscribenumber AND pcwi.wipdatanamename = 'WS_INSPECTOR'
LEFT JOIN a_wiplotdetailsdatahistory gq ON wld.wiplotdetailshistoryid = gq.wiplotdetailshistoryid AND gq.waferscribenumber = wldw.waferscribenumber AND gq.wipdatanamename = 'WS_GROSS QTY'
LEFT JOIN a_wiplotdetailsdatahistory gd ON wld.wiplotdetailshistoryid = gd.wiplotdetailshistoryid AND gd.waferscribenumber = wldw.waferscribenumber AND gd.wipdatanamename = 'WS_GOOD DIE'
LEFT JOIN a_wiplotdetailsdatahistory tq ON wld.wiplotdetailshistoryid = tq.wiplotdetailshistoryid AND tq.waferscribenumber = wldw.waferscribenumber AND tq.wipdatanamename = 'WS_TESTED QTY/SAMPLE SIZE'
LEFT JOIN a_wiplotdetailsdatahistory wr ON wld.wiplotdetailshistoryid = wr.wiplotdetailshistoryid AND wr.waferscribenumber = wldw.waferscribenumber AND wr.wipdatanamename = 'WS_TOTAL REJECTS'
LEFT JOIN a_wiplotdetailsdatahistory vi ON wld.wiplotdetailshistoryid = vi.wiplotdetailshistoryid AND vi.waferscribenumber = wldw.waferscribenumber AND vi.wipdatanamename = 'WS_VISUAL INSPECTION'
LEFT JOIN a_wiplotdetailsdatahistory td ON wld.wiplotdetailshistoryid = td.wiplotdetailshistoryid AND td.waferscribenumber = wldw.waferscribenumber AND td.wipdatanamename = 'WS_TPE DISPOSITION'
LEFT JOIN a_wiplotdetailsdatahistory wc ON wld.wiplotdetailshistoryid = wc.wiplotdetailshistoryid AND wc.waferscribenumber = wldw.waferscribenumber AND wc.wipdatanamename = 'WS_COMMENTS'
LEFT JOIN a_wiplotdetailsdatahistory oqa ON wld.wiplotdetailshistoryid = oqa.wiplotdetailshistoryid AND oqa.waferscribenumber = wldw.waferscribenumber AND oqa.wipdatanamename = 'FOR OQA_REJECT TYPE'
WHERE c.containername = :lotID AND wl.wiptrackinggroupkeyid = :ID AND wldd.iswaferdata = 1 AND wldd.wipdatanamename IN ('WS_ITEM QTY', 'WS_GROSS QTY')
) wd
ORDER BY wd."Wafer", wd.wafersequence
And also, the code behind:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
namespace CamstarReportPortal.WebForms.MAXIMDataCollection.WaferSortMaxCIM
{
public partial class MaxCIMWSTesterSummary : System.Web.UI.Page
{
static String wipkey;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
txtLot.Text = Request.QueryString["lotID"].ToString();
txtSpec.Text = Request.QueryString["specname"].ToString();
txtWipKey.Text = Request.QueryString["ID"].ToString();
wipkey = Session["ID"].ToString();
uwgDataCollection.DataSourceID = whdsDataCollection.ID;
uwgDataCollection.DataBind();
uwgDataCollection.ExpandAll();
CustomizeColumns(txtSpec.Text.Substring(0, 4));
ExpirePageCache();
}
if (ddlInsertion.Items.FindByValue("%") != null)
{
//DO NOTHING
}
else
{
ddlInsertion.Items.Insert(0, new System.Web.UI.WebControls.ListItem("All", "%"));
}
}
public void CustomizeColumns(string opCode)
{
if (uwgDataCollection.Bands.Count > 1)
{
switch (opCode)
{
case "8628":
case "8337":
case "8622":
{
this.uwgDataCollection.Bands[1].Columns[3].Hidden = true;//Sample Size
this.uwgDataCollection.Bands[1].Columns[4].Hidden = false;//Tester Summary
this.uwgDataCollection.Bands[1].Columns[5].Hidden = false;//IGS Qty
this.uwgDataCollection.Bands[1].Columns[6].Hidden = false;//Total Rejects
this.uwgDataCollection.Bands[1].Columns[7].Hidden = false;//Yield
this.uwgDataCollection.Bands[1].Columns[8].Hidden = false;//Variance
this.uwgDataCollection.Bands[1].Columns[9].Hidden = true;//QA Test Result
this.uwgDataCollection.Bands[1].Columns[10].Hidden = false;//Probemark Inspection
this.uwgDataCollection.Bands[1].Columns[11].Hidden = false;//Remarks
this.uwgDataCollection.Bands[1].Columns[12].Hidden = true;//Remarks2
this.uwgDataCollection.Bands[1].Columns[13].Hidden = false;//Operator
this.uwgDataCollection.Bands[1].Columns[14].Hidden = false;//Engineer
this.uwgDataCollection.Bands[1].Columns[15].Hidden = false;//Bin Failure
this.uwgDataCollection.Bands[1].Columns[16].Hidden = false;//Mismatch Disposition
this.uwgDataCollection.Bands[1].Columns[17].Hidden = true;//Yield Disposition
this.uwgDataCollection.Bands[1].Columns[18].Hidden = true;//Reject Disposition
this.uwgDataCollection.Bands[1].Columns[19].Hidden = false;//WAFERSTATUS
this.uwgDataCollection.Bands[1].Columns[20].Hidden = true;//Elect. Rejects # 8628
this.uwgDataCollection.Bands[1].Columns[21].Hidden = false;//Adjustment Qty
if (opCode == "8622")
{
this.uwgDataCollection.Bands[1].Columns[16].Hidden = true;//Mismatch Disposition
this.uwgDataCollection.Bands[1].Columns[18].Hidden = false;//Reject Disposition
}
break;
}
case "7628":
case "7337":
case "7629":
case "8537":
{
this.uwgDataCollection.Bands[1].Columns[3].Hidden = false;//Sample Size
this.uwgDataCollection.Bands[1].Columns[4].Hidden = false;//Tester Summary
this.uwgDataCollection.Bands[1].Columns[5].Hidden = false;//IGS Qty
this.uwgDataCollection.Bands[1].Columns[6].Hidden = false;//Total Rejects
this.uwgDataCollection.Bands[1].Columns[7].Hidden = false;//Yield
this.uwgDataCollection.Bands[1].Columns[8].Hidden = false;//Variance
this.uwgDataCollection.Bands[1].Columns[9].Hidden = false;//QA Test Result
this.uwgDataCollection.Bands[1].Columns[10].Hidden = true;//Probemark Inspection
this.uwgDataCollection.Bands[1].Columns[11].Hidden = false;//Remarks
this.uwgDataCollection.Bands[1].Columns[12].Hidden = true;//Remarks2
this.uwgDataCollection.Bands[1].Columns[13].Hidden = false;//Operator
this.uwgDataCollection.Bands[1].Columns[14].Hidden = false;//Engineer
this.uwgDataCollection.Bands[1].Columns[15].Hidden = false;//Bin Failure
this.uwgDataCollection.Bands[1].Columns[16].Hidden = true;//Mismatch Disposition
this.uwgDataCollection.Bands[1].Columns[17].Hidden = false;//Yield Disposition
this.uwgDataCollection.Bands[1].Columns[18].Hidden = false;//Reject Disposition
this.uwgDataCollection.Bands[1].Columns[19].Hidden = false;//WAFERSTATUS
this.uwgDataCollection.Bands[1].Columns[20].Hidden = false;//Elect. Rejects # 8628
this.uwgDataCollection.Bands[1].Columns[21].Hidden = false;//Adjustment Qty
if (opCode == "8537")
{
this.uwgDataCollection.Bands[1].Columns[15].Hidden = true;//Bin Failure
this.uwgDataCollection.Bands[1].Columns[16].Hidden = false;//Mismatch Disposition
this.uwgDataCollection.Bands[1].Columns[10].Hidden = true;//Probemark Inspection
this.uwgDataCollection.Bands[1].Columns[9].Hidden = true;//QA Test Result
this.uwgDataCollection.Bands[1].Columns[18].Hidden = true;//Reject Disposition
}
if (opCode == "7628")
{
this.uwgDataCollection.Bands[1].Columns[17].Hidden = true;//Yield Disposition
}
break;
}
case "6103":
{
this.uwgDataCollection.Bands[1].Columns[1].Hidden = true;//Integrator Qty
this.uwgDataCollection.Bands[1].Columns[2].Hidden = true;//Net Die
this.uwgDataCollection.Bands[1].Columns[3].Hidden = true;//Total Rejects
this.uwgDataCollection.Bands[1].Columns[4].Hidden = true;//Visual Inspection
this.uwgDataCollection.Bands[1].Columns[5].Hidden = true;//TPE Dispo
this.uwgDataCollection.Bands[1].Columns[6].Hidden = true;//Pre Align
this.uwgDataCollection.Bands[1].Columns[7].Hidden = true;//Post Visual
this.uwgDataCollection.Bands[1].Columns[8].Hidden = true;//Yield
this.uwgDataCollection.Bands[1].Columns[9].Hidden = true;//Comment
this.uwgDataCollection.Bands[1].Columns[10].Hidden = true;//Operator
this.uwgDataCollection.Bands[1].Columns[11].Hidden = true;//Inspector
this.uwgDataCollection.Bands[1].Columns[12].Hidden = true;//Engineer
this.uwgDataCollection.Bands[1].Columns[13].Hidden = true;//Status
this.uwgDataCollection.Bands[1].Columns[14].Hidden = false;//WS Gross Qty
this.uwgDataCollection.Bands[1].Columns[15].Hidden = false;//WS Good Die
this.uwgDataCollection.Bands[1].Columns[16].Hidden = false;//WS Tested Qty
this.uwgDataCollection.Bands[1].Columns[17].Hidden = false;//WS Total Rejects
this.uwgDataCollection.Bands[1].Columns[18].Hidden = false;//WS Visual Inspection
this.uwgDataCollection.Bands[1].Columns[19].Hidden = false;//WS TPE Dispo
this.uwgDataCollection.Bands[1].Columns[20].Hidden = false;//WS Comments
this.uwgDataCollection.Bands[1].Columns[21].Hidden = false;//OQ Reject Type
break;
}
default:
{
this.uwgDataCollection.Bands[1].Columns[14].Hidden = true;//WS Gross Qty
this.uwgDataCollection.Bands[1].Columns[15].Hidden = true;//WS Good Die
this.uwgDataCollection.Bands[1].Columns[16].Hidden = true;//WS Tested Qty
this.uwgDataCollection.Bands[1].Columns[17].Hidden = true;//WS Total Rejects
this.uwgDataCollection.Bands[1].Columns[18].Hidden = true;//WS Visual Inspection
this.uwgDataCollection.Bands[1].Columns[19].Hidden = true;//WS TPE Dispo
this.uwgDataCollection.Bands[1].Columns[20].Hidden = true;//WS Comments
this.uwgDataCollection.Bands[1].Columns[21].Hidden = true;//OQ Reject Type
break;
}
};
}
}
private void ExpirePageCache()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now - new TimeSpan(1, 0, 0));
Response.Cache.SetLastModified(DateTime.Now);
Response.Cache.SetAllowResponseInBrowserHistory(false);
}
protected void ddlInsertion_SelectedIndexChanged(object sender, EventArgs e)
{
string value = ddlInsertion.SelectedItem.Value.ToString();
if (ddlInsertion.SelectedItem.Value.ToString() == "All")
{
uwgDataCollection.DataSourceID = whdsDataCollection.ID;
uwgDataCollection.DataBind();
uwgDataCollection.ExpandAll();
CustomizeColumns(txtSpec.Text.Substring(0, 4));
ExpirePageCache();
}
else
{
uwgDataCollection.DataSourceID = whdsDataCollectionAPB.ID;
uwgDataCollection.DataBind();
uwgDataCollection.ExpandAll();
CustomizeColumns(txtSpec.Text.Substring(0, 4));
ExpirePageCache();
}
}
}
}
We made sure that there division by zero error is properly handled in the query and we do not have any computations on the code behind. Thanks for helping everyone.

Export data from database

I have few tables in database that are having huge amount of data. My need is
1 : To query data exist for more than one year.
2 : Export and archive them to some file.
3 : At any point of time I can insert those data back to database.
The data may or may not contain COMMA, so not sure if I should export them to csv format.
Which is the best file format I should go for ??
What should be the file size limitation here ??
This script exports rows from specified tables to INSERT statement for any tables structure. So, you'll just need to copy the result and run it in sql document of SSMS -
DECLARE
#TableName SYSNAME
, #ObjectID INT
, #IsImportIdentity BIT = 1
DECLARE [tables] CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT
'[' + s.name + '].[' + t.name + ']'
, t.[object_id]
FROM (
SELECT DISTINCT
t.[schema_id]
, t.[object_id]
, t.name
FROM sys.objects t WITH (NOWAIT)
JOIN sys.partitions p WITH (NOWAIT) ON p.[object_id] = t.[object_id]
WHERE p.[rows] > 0
AND t.[type] = 'U'
) t
JOIN sys.schemas s WITH (NOWAIT) ON t.[schema_id] = s.[schema_id]
WHERE t.name IN ('<your table name>')
OPEN [tables]
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
DECLARE
#SQLInsert NVARCHAR(MAX)
, #SQLColumns NVARCHAR(MAX)
, #SQLTinyColumns NVARCHAR(MAX)
WHILE ##FETCH_STATUS = 0 BEGIN
SELECT
#SQLInsert = ''
, #SQLColumns = ''
, #SQLTinyColumns = ''
;WITH cols AS
(
SELECT
c.name
, datetype = t.name
, c.column_id
FROM sys.columns c WITH (NOWAIT)
JOIN sys.types t WITH (NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
WHERE c.[object_id] = #ObjectID
AND (c.is_identity = 0 OR #IsImportIdentity = 1)
AND c.is_computed = 0
AND t.name NOT IN ('xml', 'geography', 'geometry', 'hierarchyid')
)
SELECT
#SQLInsert = 'INSERT INTO ' + #TableName + ' (' + STUFF((
SELECT ', [' + c.name + ']'
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')'
, #SQLTinyColumns = STUFF((
SELECT ', ' + c.name
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
, #SQLColumns = STUFF((SELECT CHAR(13) +
CASE
WHEN c.datetype = 'uniqueidentifier'
THEN ' + '', '' + ISNULL('''''''' + CAST([' + c.name + '] AS VARCHAR(MAX)) + '''''''', ''NULL'')'
WHEN c.datetype IN ('nvarchar', 'varchar', 'nchar', 'char', 'varbinary', 'binary')
THEN ' + '', '' + ISNULL('''''''' + CAST(REPLACE([' + c.name + '], '''''''', '''''''''''' ) AS NVARCHAR(MAX)) + '''''''', ''NULL'')'
WHEN c.datetype = 'datetime'
THEN ' + '', '' + ISNULL('''''''' + CONVERT(VARCHAR, [' + c.name + '], 120) + '''''''', ''NULL'')'
ELSE
' + '', '' + ISNULL(CAST([' + c.name + '] AS NVARCHAR(MAX)), ''NULL'')'
END
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 10, 'CHAR(13) + '', ('' +')
DECLARE #SQL NVARCHAR(MAX) = '
SET NOCOUNT ON;
DECLARE
#SQL NVARCHAR(MAX) = ''''
, #x INT = 1
, #count INT = (SELECT COUNT(1) FROM ' + #TableName + ')
IF EXISTS(
SELECT 1
FROM tempdb.dbo.sysobjects
WHERE ID = OBJECT_ID(''tempdb..#import'')
)
DROP TABLE #import;
SELECT ' + #SQLTinyColumns + ', ''RowNumber'' = ROW_NUMBER() OVER (ORDER BY ' + #SQLTinyColumns + ')
INTO #import
FROM ' + #TableName + '
WHILE #x < #count BEGIN
SELECT #SQL = ''VALUES '' + STUFF((
SELECT ' + #SQLColumns + ' + '')''' + '
FROM #import
WHERE RowNumber BETWEEN #x AND #x + 9
FOR XML PATH, TYPE, ROOT).value(''.'', ''NVARCHAR(MAX)''), 1, 2, CHAR(13) + '' '') + '';''
PRINT(''' + #SQLInsert + ''')
PRINT(#SQL)
SELECT #x = #x + 10
END'
EXEC sys.sp_executesql #SQL
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
END
CLOSE [tables]
DEALLOCATE [tables]
In output you get something like this (AdventureWorks.Person.Address):
INSERT INTO [Person].[Address] ([AddressID], [AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate])
VALUES
(1, '1970 Napa Ct.', NULL, 'Bothell', 79, '98011', '9AADCB0D-36CF-483F-84D8-585C2D4EC6E9', '2002-01-04 00:00:00')
, (2, '9833 Mt. Dias Blv.', NULL, 'Bothell', 79, '98011', '32A54B9E-E034-4BFB-B573-A71CDE60D8C0', '2003-01-01 00:00:00')
, (3, '7484 Roundtree Drive', NULL, 'Bothell', 79, '98011', '4C506923-6D1B-452C-A07C-BAA6F5B142A4', '2007-04-08 00:00:00')
, (4, '9539 Glenside Dr', NULL, 'Bothell', 79, '98011', 'E5946C78-4BCC-477F-9FA1-CC09DE16A880', '2003-03-07 00:00:00')
, (5, '1226 Shoe St.', NULL, 'Bothell', 79, '98011', 'FBAFF937-4A97-4AF0-81FD-B849900E9BB0', '2003-01-20 00:00:00')
, (6, '1399 Firestone Drive', NULL, 'Bothell', 79, '98011', 'FEBF8191-9804-44C8-877A-33FDE94F0075', '2003-03-17 00:00:00')
, (7, '5672 Hale Dr.', NULL, 'Bothell', 79, '98011', '0175A174-6C34-4D41-B3C1-4419CD6A0446', '2004-01-12 00:00:00')
, (8, '6387 Scenic Avenue', NULL, 'Bothell', 79, '98011', '3715E813-4DCA-49E0-8F1C-31857D21F269', '2003-01-18 00:00:00')
, (9, '8713 Yosemite Ct.', NULL, 'Bothell', 79, '98011', '268AF621-76D7-4C78-9441-144FD139821A', '2006-07-01 00:00:00')
, (10, '250 Race Court', NULL, 'Bothell', 79, '98011', '0B6B739D-8EB6-4378-8D55-FE196AF34C04', '2003-01-03 00:00:00');
UPDATE:
And this script exports rows from specified tables to CSV format in output window for any tables structure.
DECLARE
#TableName SYSNAME
, #ObjectID INT
DECLARE [tables] CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT
'[' + s.name + '].[' + t.name + ']'
, t.[object_id]
FROM (
SELECT DISTINCT
t.[schema_id]
, t.[object_id]
, t.name
FROM sys.objects t WITH (NOWAIT)
JOIN sys.partitions p WITH (NOWAIT) ON p.[object_id] = t.[object_id]
WHERE p.[rows] > 0
AND t.[type] = 'U'
) t
JOIN sys.schemas s WITH (NOWAIT) ON t.[schema_id] = s.[schema_id]
WHERE t.name IN ('<your table name>')
OPEN [tables]
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
DECLARE
#SQLInsert NVARCHAR(MAX)
, #SQLColumns NVARCHAR(MAX)
, #SQLTinyColumns NVARCHAR(MAX)
WHILE ##FETCH_STATUS = 0 BEGIN
SELECT
#SQLInsert = ''
, #SQLColumns = ''
, #SQLTinyColumns = ''
;WITH cols AS
(
SELECT
c.name
, datetype = t.name
, c.column_id
FROM sys.columns c WITH (NOWAIT)
JOIN sys.types t WITH (NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
WHERE c.[object_id] = #ObjectID
AND c.is_computed = 0
AND t.name NOT IN ('xml', 'geography', 'geometry', 'hierarchyid')
)
SELECT
#SQLTinyColumns = STUFF((
SELECT ', [' + c.name + ']'
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
, #SQLColumns = STUFF((SELECT CHAR(13) +
CASE
WHEN c.datetype = 'uniqueidentifier'
THEN ' + '';'' + ISNULL('''' + CAST([' + c.name + '] AS VARCHAR(MAX)) + '''', ''NULL'')'
WHEN c.datetype IN ('nvarchar', 'varchar', 'nchar', 'char', 'varbinary', 'binary')
THEN ' + '';'' + ISNULL('''' + CAST(REPLACE([' + c.name + '], '''', '''''''') AS NVARCHAR(MAX)) + '''', ''NULL'')'
WHEN c.datetype = 'datetime'
THEN ' + '';'' + ISNULL('''' + CONVERT(VARCHAR, [' + c.name + '], 120) + '''', ''NULL'')'
ELSE
' + '';'' + ISNULL(CAST([' + c.name + '] AS NVARCHAR(MAX)), ''NULL'')'
END
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 10, 'CHAR(13) + '''' +')
DECLARE #SQL NVARCHAR(MAX) = '
SET NOCOUNT ON;
DECLARE
#SQL NVARCHAR(MAX) = ''''
, #x INT = 1
, #count INT = (SELECT COUNT(1) FROM ' + #TableName + ')
IF EXISTS(
SELECT 1
FROM tempdb.dbo.sysobjects
WHERE ID = OBJECT_ID(''tempdb..#import'')
)
DROP TABLE #import;
SELECT ' + #SQLTinyColumns + ', ''RowNumber'' = ROW_NUMBER() OVER (ORDER BY ' + #SQLTinyColumns + ')
INTO #import
FROM ' + #TableName + '
WHILE #x < #count BEGIN
SELECT #SQL = STUFF((
SELECT ' + #SQLColumns + ' + ''''' + '
FROM #import
WHERE RowNumber BETWEEN #x AND #x + 9
FOR XML PATH, TYPE, ROOT).value(''.'', ''NVARCHAR(MAX)''), 1, 1, '''')
PRINT(#SQL)
SELECT #x = #x + 10
END'
EXEC sys.sp_executesql #SQL
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
END
CLOSE [tables]
DEALLOCATE [tables]
In output you get something like this (AdventureWorks.Person.Person):
1;EM;0;NULL;Ken;J;Sánchez;NULL;0;92C4279F-1207-48A3-8448-4636514EB7E2;2003-02-08 00:00:00
2;EM;0;NULL;Terri;Lee;Duffy;NULL;1;D8763459-8AA8-47CC-AFF7-C9079AF79033;2002-02-24 00:00:00
3;EM;0;NULL;Roberto;NULL;Tamburello;NULL;0;E1A2555E-0828-434B-A33B-6F38136A37DE;2001-12-05 00:00:00
4;EM;0;NULL;Rob;NULL;Walters;NULL;0;F2D7CE06-38B3-4357-805B-F4B6B71C01FF;2001-12-29 00:00:00
5;EM;0;Ms.;Gail;A;Erickson;NULL;0;F3A3F6B4-AE3B-430C-A754-9F2231BA6FEF;2002-01-30 00:00:00
6;EM;0;Mr.;Jossef;H;Goldberg;NULL;0;0DEA28FD-EFFE-482A-AFD3-B7E8F199D56F;2002-02-17 00:00:00
Try using the bcp command line utility, which is very efficient at handling import/export for large data sets:
bcp "select * from [YourTable]" queryout data.dat -n -S YourServer -d "YourDatabase" -T
-T means Trusted Authentication. -n means native format, so you don't need to worry about data types, commas, etc. However, this does mean you can't view the data in an editor; it's only available for loading back into SQL Server. You can use -c instead if you want CSV format.
To import back in:
bcp "[YourTable]" in data.dat -n -S YourServer -d "YourDatabase" -T

Resources