2016-06-21 20 views
0

Ich habe eine Tabelle und die Daten in einem der Felder ist ein Feldname in einer anderen Tabelle.Wie verbinde ich dynamisch zwischen zwei Tabellen

Ich möchte die Daten aus der zweiten Tabelle basierend auf diesem Feld extrahieren. Beispiel:

  • Tabelle A hat eine Spalte namens FldName. FldName hat den Wert Number001.
  • Tabelle B hat eine Spalte mit der Bezeichnung Number001.

Ich möchte den Wert von B.Number001 extrahieren.

Nicht zu SQL-Kenntnisse so detaillierte Antworten werden geschätzt.

+2

Bitte tun Sie sich selbst einen Gefallen und ändern Sie das Schema, wird Ihnen eine Menge Ärger in Zukunft ersparen. –

+0

Zunächst einmal, Danke, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten. Ich werde es versuchen. Zweitens stimme ich zu, dass das Schema schrecklich ist. aber es ist nicht meins. Ich versuche, einen Bericht basierend auf einem Softwarepaket zu schreiben :( – EMarkus

Antwort

1

Beispieltabellen

CREATE TABLE TABLEA (ID INT , FldName SYSNAME) 
GO 
INSERT INTO TABLEA VALUES(1 , 'Number001') 
GO 

CREATE TABLE TABLEB (Number001 INT) 
GO 
INSERT INTO TABLEB VALUES (1),(2),(3) 
GO 

Verfahren Datenruf

CREATE PROC get_DataFromTableB 
@FieldID INT = NULL 
AS 
BEGIN 
    SET NOCOUNT ON; 
Declare @Sql Nvarchar(max), @ColName SYSNAME; 

IF (@FieldID IS NULL) 
BEGIN 
    SET @Sql = N'SELECT * FROM TABLEB' 
    Exec sp_executesql @Sql 
END 
ELSE 
BEGIN 
    SELECT @ColName = FldName FROM TABLEA 
    SET @Sql = N'SELECT '+QUOTENAME(@ColName)+' FROM TABLEB' 
    Exec sp_executesql @Sql 
END 
END 

Verfahren zu erhalten

Sie das Verfahren ein ID despassieren kann 0 von TableA oder überhaupt kein Parameter.

Wenn die ID übergibt es wird nur die Spalte von TableB zurückkehren und, wenn keine ID es einfach wird übergeben wird tun, um ein select * from TableB

Um nur Number001 Feld von tableB

Exec get_DataFromTableB 1 

Um alle zu bekommen die Felder von TableB

Verwandte Themen