2014-09-22 25 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语句的原因是为了处理列可能具有不同类型的事实。

相关问题