2014-09-22 69 views
2

是否有可能有一個SQL查詢以及如何通過用戶輸入從文本框中排序,我試圖做的是從日期獲取表中的所有記錄從用戶輸入是否有可能有一個用戶輸入排序

SELECT orderDate AS Date, orderPizzaTotals AS 'PIZZAS SOLD', 
     orderDrinkTotals AS 'DRINKS SOLD', 
     orderPriceTotal AS 'TRANSACTION TOTAL' 
FROM dbo.[Order] sort "USERINPUT.TEXT" 
+1

你用什麼文本框? PHP? C#? Java的?那麼在該程序中,獲取該文本框的內容並將其與sql查詢連接起來,然後執行該查詢。 **但是**如果語法無效,查詢將失敗。考慮下拉列表選項,或者點擊標題或其他一些可以保護您免受垃圾和/或SQL注入的設備,而不是文本框。 – 2014-09-22 00:35:41

+2

發佈數據庫服務器的類型。您當然可以在SQL Server中執行此操作,但不建議這樣做。在SQL Server中,你可以使用'OPENROWSET'來實時打開文本文件,然後使用'case'語句來選擇字段來排序 – 2014-09-22 00:36:18

+0

用戶將如何知道要排序的列的名稱? – 2014-09-22 00:45:52

回答

3

有可能基於動態信息,如果您使用動態SQL在SQL Server(例如,你從代碼傳遞一個參數)排序:

declare @userinput nvarchar(100) = 'your_column' 

declare @sql nvarchar(1000) = N'SELECT orderDate AS Date, 
    orderPizzaTotals AS ''PIZZAS SOLD'', 
    orderDrinkTotals AS ''DRINKS SOLD'', 
    orderPriceTotal AS ''TRANSACTION TOTAL'' FROM dbo.[Order] 
    ORDER BY ' + @userinput 

exec sp_executesql @sql 
+0

嗯我沒有意識到這一點,我應該試試吧! – mybirthname 2014-09-22 00:38:37

0

你可以這樣做與一個巨大的案件聲明:

SELECT orderDate AS Date, orderPizzaTotals AS "PIZZAS SOLD", 
     orderDrinkTotals AS "DRINKS SOLD", 
     orderPriceTotal AS "TRANSACTION TOTAL" 
FROM dbo.[Order] o 
ORDER BY (case when USERINPUT.TEXT = 'Date' then Date end), 
     (case when USERINPUT.TEXT = 'PIZZAS SOLD' then "PIZZAS SOLD" end), 
     (case when USERINPUT.TEXT = 'DRINKS SOLD' then "DRINKS SOLD" end), 
     (case when USERINPUT.TEXT = 'TRANSACTION TOTAL' then "TRANSACTION TOTAL" end) 

使用單獨的case語句的原因是爲了處理列可能具有不同類型的事實。

相關問題