2017-11-23 2 views
0

Ich bin Beginner für gespeicherte Prozeduren, also beginne ich mit der Erklärung, was ich versuche zu erreichen.
Ich habe Excel-App, um Daten von SQL Server zu holen. Ich habe 6 SQL-SELECT-Anweisungen in einer Schleife mit sich ändernden Parametern durchgeführt.
Ich habe es bereits geschafft, eine SQL in gespeicherte Prozedur zu ändern und es funktioniert.Muliple SELECT in gespeicherten Prozedur mit Parametern

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE PROCEDURE Test 
    @itm nvarchar(20) = 0 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT ISNULL(SUM(T.[some_field]),0) as [Sum] 
    FROM [some_table] AS T, [some_other_table] AS F, [some_other_table2] AS I 
    WHERE T.[field] = 1 AND I.[field] = @itm AND 
    F.[field] = T.[field] AND F.[field] = I.[field] 
END 


Wenn ich diese erste bekam ich zu arbeiten begonnen, alle 6 SELECT-Abfragen in eine gespeicherte Prozedur zu fragen, ob es möglich zu setzen?
Alle Abfragen ergeben ein Feld, das die Summe der Mengen darstellt.
Alle Abfragen benötigen mindestens einen Parameter.
Am Ende i einen Datensatz mit 6 Feldern erhalten speichert möchte, die ich einfach in Excel durch Range("A1").copyfromrecordset rst
statt der Schaffung 6 verschiedene gespeicherte Prozeduren setzen können für jede SELECT
Wird es so einfach sein wie setzen nur eine SELECT nach Ein weiterer?
Und was ist mit Parametern? Wenn der Parameter für zwei Abfragen gleich ist, sollte er in beiden gleich heißen?

+0

würde ich 'UDF' dafür statt' SP' – Sami

+1

@Sami verwenden: UDF fein sind, wenn Inline-Tabelle bewertet, sonst zu vermeiden. –

Antwort

1

Sie könnten alle 6 Felder aus einer gespeicherten Prozedur zurückgeben. Auf der grundlegendsten Ebene zu tun, die Art und Weise, dass wäre so etwas wie:

SELECT 
    (
     SELECT ISNULL(SUM(T.[some_field]),0) as [Sum] 
     FROM [some_table] AS T, [some_other_table] AS F, [some_other_table2] AS I 
     WHERE T.[field] = 1 AND I.[field] = @itm AND 
     F.[field] = T.[field] AND F.[field] = I.[field] 
    ) Field1 
    , 
     (
      -- Another query 
     ) Field2 
    , etc. 
+0

Das war genau das, wonach ich suchte. Danke vielmals – Sphinx

Verwandte Themen