2017-01-18 2 views
0

Ich habe eine Tabelle „Werte“ Die Daten sieht wie folgt vergeben:Wie Spalte Ergebnisse auf Parameter einer Abfrage

ID  Label  Value 

    1  StartDate 1/1/17 
    2  EndDate 1/15/17 
    3  Dept   6 

Was ich ist, die Werte der Spalte „Label“ tun möchten, laden auf die entsprechenden Parameter in meiner Abfrage:

Declare 
    @startdate Datetime, 
    @enddate Datetime, 
    @DepartmentID int 

Select * 
From Customers 
Where created between @startdate and @enddate and @DepartmentID 

Wie kann ich @StartDate auf das ‚Startdatum‘ ‚value‘ in der Wertetabelle zuordnen? Da ich in meiner Abfrage andere Datentypen verwende, als sie in der Values-Tabelle gespeichert sind (Werte sind 'nvarchar' in der Wertetabelle) Kann ich auf mögliche Probleme stoßen?

+1

wenn Ihre Werte nvarchar sind, müssen Sie diejenigen bisher gegossen und dann entsprechend überprüfen. –

Antwort

1
Declare 
@startdate Datetime, 
@enddate Datetime, 
@DepartmentID int 

set @startdate = (Select convert(datetime,[Value]) from dbo.Values where Label='StartDate') 
set @enddate = (Select convert(datetime,[Value]) from dbo.Values where Label='EndDate') 
set @DepartmentID =(Select convert(int,[Value]) from dbo.Values where Label='Dept') 

Select * 
From Customers 
Where created between @startdate and @enddate and DepartmentId = @DepartmentID 
1

Sie könnten versuchen, so etwas zu tun:

SELECT 
    * 
FROM 
    CUSTOMERS 
WHERE 
    CREATED BETWEEN 
     (SELECT TOP 1 [Value] FROM Values WHERE Label = 'StartDate') --perform casts here if necessary 
     AND 
     (SELECT TOP 1 [Value] FROM Values WHERE Label = 'EndDate') --perform casts here if necessary 
+1

I upvoting, aber die Konvertierung zwischen Zeichenfolgen und Daten könnte ein Problem sein. –

Verwandte Themen