Pytanie : Dzwonić zaopatrzony procedura KURSOR od zaopatrzony procedura

I potrzebować jeden przechować procedura z wewnątrz jeden. I móc rezultat pomyślnie z jeden wyjątek i jeden być kiedy the nazwany zaopatrzony procedura używać KURSOR the rezultat. I mieć obfitość zaopatrzony procedura który dzwonić i i podnosić inny the wydajność od ale w tym wypadku I potrzebować concatenate seria łączyć rejestr w pojedynczy string.

The kursor ale praca, i.e. I móc że ono wracać the poprawny sznurek ale gdy I wykonywać the zaopatrzony procedura the kursor I tylko dostawać the rezultat od the kursor. I być mieć nadzieję I brakować pomoc naprawdę prosty tutaj i prosty prosty mieć że answer.

I dołączać the kod dla oba zaopatrzony procedura, the rezultat od the wewnętrzny zaopatrzony procedura (the jeden the kursor), the wydajność the wewnętrzny zaopatrzony procedura seans który ono pracować i niektóre SQL Zapytanie Analyzer rezultat dwa rezultat set raczej jeden dla the przechować procedure.

Any pomoc ogromnie doceniać.
Results dla WEWNĘTRZNY Zaopatrzony Procedure
 332516
Results dla ZEWNĘTRZNY (Dzwonić) Przechować Procedure
 332517
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
/* Class= być the OUTER/CALLING przechować procedura *

/*
	Procedura Imię:	usp_NewProductForm_Print_Document_By_DocumentID
	Autor:			Peter Stanford
	Data Pisać:		8th Październik 2006
	Opis:		Ten Procedura wracać lista Nowy Produkt Forma
	Kopyto Szewskie Aktualizować:		
	Zmiana Historia:		
	7th Marzec 2010 Dodawać Description_2 i Description_3
*
TWORZYĆ PROCEDURA dbo.usp_NewProductForm_Print_Document_By_DocumentID
	@DocumentID jako integer



OZNAJMIAĆ @Warehouse_List varchar (1000)

EXEC usp_NewProductForm_Select_Warehouse_List_For_Printing @DocumentID, @Warehouse_List WYDAJNOŚĆ

WYBIÓRKA 
	a.ID,
	SKRZYNKA a.OwnManufacture GDY (1) WTEDY "Tak" INNY "Nie" KOŃCÓWKA "OwnManufacture",
	KONWERTYTA (char (6), a.APDApprovalNumber) + '' +
	NAWRACAĆ (char (20), g.Customer) + '' + 
	NAWRACAĆ (char (20), g.ProposedCodeNumber) + '' + 
	NAWRACAĆ (char (10), g.DateClosed, 103) "APDApprovalNumber",
	PAKOWAĆ b.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY b.Name KOŃCÓWKA "RequestedBy",
	PAKOWAĆ c.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY c.Name KOŃCÓWKA "Gałąź",
	NAWRACAĆ (varchar (10), a.NPFDate, 103) "NPFDate",
	a.ReasonForProposal,
	a.ProductCode,
	PAKOWAĆ d.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY d.Name KOŃCÓWKA "GroupCode",
	a.ColoursAndSizes,
	a.Description,
	PAKOWAĆ e.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY e.Name KOŃCÓWKA "StockType",
	PAKOWAĆ f.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY f.Name KOŃCÓWKA "SalesType",
	PAKOWAĆ l.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY l.Name KOŃCÓWKA "SalesUnitOfMeasure",
	a.PackQuantity,
	a.SupplierName,
	a.SupplierNumber,
	a.SupplierStockCode,
	PAKOWAĆ m.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY m.Name KOŃCÓWKA "SupplierUnitOfMeasure",
	a.ConversionFactor,
	a.SupplierPackQuantity,
	a.EstimatedLeadTimeDays,
	a.EconomicOrderQuantity,
	a.MinimumQuantity,
	a.MaximumQuantity,
	a.CurrentBuyPrice,
	a.QuantityPerUnit,
	a.Currency,
	a.SellingPrice01,
	a.SellingPrice02,
	a.SellingPrice03,
	a.SellingPrice04,
	NAWRACAĆ (varchar (10), a.ForecastStartDate, 103) "ForecastStartDate",
	a.ForecastPeriod01,
	a.ForecastPeriod02,
	a.ForecastPeriod03,
	a.ForecastPeriod04,
	a.ForecastPeriod05,
	a.ForecastPeriod06,
	a.APN,
	a.ExchangeRateApproved,
	a.DutyRate,
	a.OverseasFreight,
	a.LocalCosts,
	PAKOWAĆ h.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Wtedy zatwierdzać" INNY h.Name KOŃCÓWKA "MaterialsManagerApproval",
	NAWRACAĆ (varchar (10), a.MaterialsManagerApprovalDate, 103) "MaterialsManagerApprovalDate",
	a.LastUpdated,
	a.UpdatedBy,
	PAKOWAĆ a.ProntoChanged GDY (0) WTEDY "Nie" INNY "Tak" KOŃCÓWKA "ProntoChanged",
	PAKOWAĆ a.Rejected GDY (0) WTEDY PAKOWAĆ a.DateClosed GDY NIEOBOWIĄZUJĄCY WTEDY '' INNY "Ten dokument zamykać" + r.Name + "na" + KONWERTYTA (varchar (10), a.DateClosed, 103) KOŃCÓWKA INNY "Ten dokument odrzucać" + r.Name + "na" + KONWERTYTA (varchar (10), a.DateClosed, 103) KOŃCÓWKA jako Status,
	NAWRACAĆ (varchar (10), a.DateClosed, 103) "DateClosed",
	PAKOWAĆ r.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie Zamykać" INNY r.Name KOŃCÓWKA "ClosedBy",
	PAKOWAĆ k.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie wybierać" INNY k.Name KOŃCÓWKA "CountryOfOrigin",
	a.AHECCImport,
	a.AHECCExport,
	a.EachWeight,
	a.CartonQuantity,
	a.CartonWeight,
	a.PalletQuantity,
	a.CartonHeight,
	a.CartonWidth,
	a.CartonDepth,
	a.CartonsPerLayer,
	a.MaximumHeight,
	a.MaximumLayers,
	PAKOWAĆ n.Name GDY NIEOBOWIĄZUJĄCY WTEDY "Nie Wybierać" INNY n.Name KOŃCÓWKA "ABCClassification",
	a.Description_2,
	a.Description_3,
	a.OuterPackQuantity,
	PAKOWAĆ @Warehouse_List GDY NIEOBOWIĄZUJĄCY WTEDY '' INNY @Warehouse_List KOŃCÓWKA "Warehouse_List"
OD 
	(((((((((((NewProductForms a	
				LEWY ZEWNĘTRZNY ŁĄCZYĆ Pięcioliniowy B na b.ID = a.RequestedBy)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ Lokacja c na c.ID = a.Branch)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ ProductGroup D na d.ID = a.GroupCode)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ StockType e na e.ID = a.StockType)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ SalesType f na f.ID = a.SalesType)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ Pięcioliniowy h na h.ID = a.MaterialsManagerApproval)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ Pięcioliniowy r na r.ID = a.ClosedByID)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ ProductDevelopmentApplications g na g.ID = a.APDApprovalNumber)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ Kraj k na k.ID = a.CountryOfOrigin)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ SalesUOM l na l.ID = a.SalesUnitOfMeasure)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ SupplierUOM m na m.ID = a.SupplierUnitOfMeasure)
				LEWY ZEWNĘTRZNY ŁĄCZYĆ ABC_Class n na n.ID = a.ABCClassification
DOKĄD
	a.ID = @DocumentID
POWRÓT (0)
IŚĆ

/*/* być the INNER/CALLED przechować procedura *

/*
	Procedura Imię:	usp_NewProductForm_Select_Warehouse_List_For_Printing
	Autor:			Peter Stanford
	Data Pisać:		1st Sierpień 2010
	Opis:		Ten Procedura wracać lista Magazyn dla na the PDF
	Kopyto Szewskie Aktualizować:		

*
TWORZYĆ PROCEDURA usp_NewProductForm_Select_Warehouse_List_For_Printing 
	@DocumentID integer,
	@Warehouse_List varchar (1000) PRZESYŁAĆ


ZACZYNAĆ

OZNAJMIAĆ Warehouse_Cursor KURSOR DLA

WYBIÓRKA 
	PAKOWAĆ a.Name GDY NIEOBOWIĄZUJĄCY WTEDY '' INNY a.Name KOŃCÓWKA Imię
OD
	Warehouse_FG LEWY ZEWNĘTRZNY ŁĄCZYĆ NPF_FGWarehouse B na b.WarehouseID = a.ID
DOKĄD
	b.NPFID = @DocumentID
ROZKAZ Imię


OTWIERAĆ Warehouse_Cursor

USTAWIAĆ NOCOUNT DALEJ

/*SET @Warehouse_List = NULL*/

OZNAJMIAĆ @Name varchar (50)

PRZYNOSIĆ NASTĘPNIE OD 
	Warehouse_Cursor 
W 
	@Name

PODCZAS GDY @@FETCH_STATUS = (0) ZACZYNAĆ
	WYBRANY @Warehouse_List = @Warehouse_List + @Name + ","

PRZYNOSIĆ NASTĘPNIE OD 
	Warehouse_Cursor 
W 
	@Name
KOŃCÓWKA

KOŃCÓWKA

WYBRANY @Warehouse_List

ZAMKNIĘTY Warehouse_Cursor

DEALOKOWAĆ Warehouse_Cursor
IŚĆ
Related Rozwiązanie: SQL SERWER Najlepszy Practice

Odpowiedź : Dzwonić zaopatrzony procedura KURSOR od zaopatrzony procedura

Asside od the wątpliwy zasługa ten wewnętrzny Zaopatrzony Procedura che być w desperackiej potrzebie recoding, ty porównywać jabłko pomarańcze. Gdy ty badać ono ty robić ono lubić robić:

EXEC usp_NewProductForm_Select_Warehouse_List_For_Printing (1), ''

Mimo To, gdy ty dzwonić ono, ty robić ono lubić robić:
EXEC usp_NewProductForm_Select_Warehouse_List_For_Printing @DocumentID, @Warehouse_List WYDAJNOŚĆ

Ponieważ @Warehouse_List być NIEOBOWIĄZUJĄCY i nigdy nigdy, i być dokładnie the wartość ty iść z powrotem, niezależnie od twój nieważny use WYBRANY @Warehouse_List przy the końcówka the Zaopatrzony Procedura.

W Ten Sposób jeżeli ty właśnie próbować the kod tak, że ono rozwiązywać the problem, raczej załatwiać the problem: ty potrzebować iniitialize the wartość @Warehouse_List gdzieś.

Na przykład ty móc jeden the następujący opcja:
1. W twój zewnętrzny Zaopatrzony Procedura:
OZNAJMIAĆ @Warehouse_List varchar (1000)

USTAWIAĆ @Warehouse_List = ''                -- dodawać ten linia

EXEC usp_NewProductForm_Select_Warehouse_List_For_Printing @DocumentID, @Warehouse_List WYDAJNOŚĆ

2. W twój Wewnętrzny Zaopatrzony Procedura
SET NOCOUNT DALEJ

/*SET @Warehouse_List = NULL*/
USTALONY @Warehouse_List = ''                -- dodawać ten linia

OZNAJMIAĆ @Name varchar (50)

3.  Zmieniać ten linia w the Wewnętrzny Zaopatrzony Procedura:
    ZACZYNAĆ
        -- WYBIERAĆ @Warehouse_List = @Warehouse_List + @Name + ","
        WYBIERAĆ @WAREHOUSE_LIST = ISNULL (@WAREHOUSE_LIST, '') + @NAME + ","           -- Zmieniać ten linia
        PRZYNOSIĆ NASTĘPNIE OD Warehouse_Cursor W @Name
    KOŃCÓWKA

I gdy ty dostawać szansa zadawalać re-write który Zaopatrzony Procedura lub polepszać wciąż konwertyta ono UDF.
Inne rozwiązania  
 
programming4us programming4us