Ben MS SQL 2012 Express aşağıdaki sorguyu çalıştırmak çalışıyorum:Nasıl düzeltebilirim "Alt sorgu EXISTS ile eklenmediğinde seçim listesinde yalnızca bir ifade belirtilebilir" hatası?
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"] + "')"
);
Ama aşağıdaki hatayı alıyorum:
Only one expression can be specified in the
select
list when the subquery is not introduced withEXISTS
.
Bu sorunu nasıl çözebilir?
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 + "'
Ve sql enjeksiyon saldırıları ile güvenlik risklerini önlemek için sorguda parametreleri kullanmak önemle tavsiye ederiz:
"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 + "'"
İlk alt sorgunuzda birden fazla sütun seçiyorsunuz. Ancak her bir alt sorgu yalnızca bir sütun döndürür. –
Ayrıca SQL enjeksiyonunu da okumalısınız. Doğrudan dinamik olarak oluşturulmuş bir SQL'de bir istek değişkeni kullanıyorsunuz - Çok kötü kodlama stili. –
Kullanıcı girdisi olan her sorgu için parametreleri kullanıyorum, kullanıcı adı yalnızca sayı ve harf içerebilir. Bu model tarafından kontrol ediliyor. (Asp.net mvc kullanıyorum). İpucu için teşekkürler! – Jamie