it-swarm.com.de

Behebung des Fehlers "Es kann nur ein Ausdruck in der Auswahlliste angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird"?

Ich versuche, die folgende Abfrage unter MS SQL 2012 Express auszuführen:

Select (
    Select Id, Salt, Password, BannedEndDate
    from Users
    where username = '" + LoginModel.Username + "'
), (
    Select Count(*)
    From LoginFails
    where username = '" + LoginModel.Username + "'
    And IP = '" + Request.ServerVariables["REMOTE_ADDR"] + "')"
);

Aber ich bekomme folgenden Fehler:

In der Liste select kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird.

Wie kann ich dieses Problem lösen?

14
Jamie

Versuche dies:

 Select 
    Id, 
    Salt, 
    Password, 
    BannedEndDate, 
    (Select Count(*) 
        From LoginFails 
        Where username = '" + LoginModel.Username + "' And IP = '" + Request.ServerVariables["REMOTE_ADDR"] + "')
 From Users 
 Where username = '" + LoginModel.Username + "'

Und ich empfehle Ihnen dringend, Parameter in Ihrer Abfrage zu verwenden, um Sicherheitsrisiken bei SQL Injection-Angriffen zu vermeiden!

Ich hoffe, das hilft!

7
mortb

Probier diese -

"SELECT 
       ID, Salt, password, BannedEndDate
     , (
          SELECT COUNT(1)
          FROM dbo.LoginFails l
          WHERE l.UserName = u.UserName
               AND IP = '" + Request.ServerVariables["REMOTE_ADDR"] + "'
      ) AS cnt
FROM dbo.Users u
WHERE u.UserName = '" + LoginModel.Username + "'"
7
Devart