2016-04-21 19 views
0

Ich muss aus einer von zwei Ansichten auswählen. würde ich meine Abfrage- SQL mag wie etwas sein:Wählen Sie aus einer der beiden Ansichten in SQL Server

'select * from MyViewFunction(1);' 

wobei der Parameter 1 wird von dem deside ansehen i wählen sollte.

So eine Funktion etwas wie folgt aus:

CREATE FUNCTION MyViewFunction (@ViewId INTEGER) 
RETURNS TABLE 
AS 
    IF(@ViewId == 1) 
    BEGIN 
      RETURN (SELECT * FROM view1) 
    END 
     ELSE 
    BEGIN 
      RETURN (SELECT * FROM view2) 
    END 

Abgesehen davon, dass dies nicht funktioniert.

Jeder möglicher Vorschlag

+0

Was passiert? Welche Ergebnisse bekommst du? "Funktioniert nicht" ist ein wenig vage – Alex

Antwort

0

Warum nicht dynamischen SQL?

Sie benötigen eine Funktion und eine Prozedur. Eigentlich können Sie die Funktion in das Verfahren aber trotzdem kombinieren -

CREATE VIEW view1 
AS 
SELECT 1 AS [Test1] 

CREATE VIEW view2 
AS 
SELECT 2 AS [Test2] 

CREATE FUNCTION dbo.fn_ReturnViewName (@Id INTEGER) 
RETURNS NVARCHAR(50) 
AS 
BEGIN 
    RETURN 
     CASE WHEN @Id = 1 THEN 'view1' WHEN @Id = 2 THEN 'view2' ELSE '' END 
END 


CREATE PROCEDURE MyViewProc (@ViewId INTEGER) 
AS 

DECLARE @SQL AS NVARCHAR(MAX) 
DECLARE @Name AS NVARCHAR(50) 
SET @Name = (SELECT dbo.fn_ReturnViewName(@ViewId)) 
SET @SQL = N' 

      SELECT * 
      FROM ' + @Name 

      EXEC sp_executesql 
      @stmt = @SQL; 

EXEC MyViewProc @ViewID =1 
EXEC MyViewProc @ViewID =2 
+0

Kann nicht funktionieren, egal wie ich es versuche zu ändern. Ich habe versucht: RETURN SELECT * FROM (dbo.fn_ReturnViewName auswählen (1)) und: RETURN SELECT * FROM (Select dbo.fn_ReturnViewName (1)) Nichts davon funktioniert –

+0

Bitte überprüfen Sie die bearbeiten. – freakyhat

2

erkannt werden, dass eine Inline-Tabellenwertfunktion wird erklärt, dass per definitionem nur eine einzelne SELECT-Anweisung enthalten.

Wenn Sie dies tun müssen, dann benötigen Sie eine Multi-Anweisung Tabelle Wertfunktion, beachten Sie jedoch, dass dies scheint nicht etwas, das ich in einer Produktionsumgebung sehen möchte, und Sie müssen ein wenig zurück zu a 'richtige' Lösung ... Obwohl, wie das aussieht, gibt es nicht genug Informationen zu sagen.

Diese link Weitere Einzelheiten zu den operativen Unterschiede der beiden geben.

Verwandte Themen