的SQL Server 2016的.Net 4.5.2 C#檢查變量exists..inline SQL
我說這方面,我使用Northwind數據庫,以顯示我想要實現的。請不要評論Northwind數據庫。這只是我將要做的一個例子。
我正在使用ADO.Net來執行內聯SQL。我的困境是我將有可能傳遞給sql查詢的可選參數。下面是C#:
var city = "";
var state = "tx";
var sqlQuery = "
if exists @City
begin
select * from Customers where city = @City and [email protected];
end
else
begin
select * from Customers where [email protected];
end
";
var conn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI");
conn.Open();
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
if (!string.IsNullorEmpty(city))
{
SqlParameter param = new SqlParameter();
param.ParameterName = "@City";
param.Value = city;
cmd.Parameters.Add(param);
}
if (!string.IsNullorEmpty(state))
{
SqlParameter param = new SqlParameter();
param.ParameterName = "@State";
param.Value = state;
cmd.Parameters.Add(param);
}
var reader = cmd.ExecuteReader();
正如你所看到的,可變的城市是空白的,因此參數@city不會傳遞到SQL查詢,但該變量狀態不爲空,以便@state參數將被傳遞到查詢。請記住,@City不會一直是空白的。我在sql中檢查了是否存在@City,但這不起作用。如何檢查sql查詢是否存在@City,@State或其他可能傳遞的參數?如果我能弄清楚那部分,我可以處理sql中需要做的事情。感謝任何和所有的幫助。
P.S.我無法使用存儲過程。
爲什麼你不能使用存儲過程?這是一個奇怪的限制。 –
我同意。我的工作把我的手銬。我們使用所有內聯sql。我不確定這是可能的他們想要什麼 – BoundForGlory
這是完全有可能的。看到我的答案。我對你在這樣荒謬的限制下工作的地方感到不好。我以前聽說過這種事情,總是歸結爲一些誤導並能夠做出如此徹底的授權的人。最糟糕的部分是,同一個人也通常死定了他們的誤導信念,並拒絕理性。你要麼處理這種廢話,要麼清理你的簡歷。 –