在做一個project的時候,要對表實現任意的排序,說得明白點就是這樣:
在存儲過程中聲明一個@parameter,然後在使用查詢條件後的排序,要根據我的@parameter來實現,而我這個@parameter實際傳進去的就是一個字段值。
網上Google了一下,發現有這樣的例子,大多數都是以普提樹的多字段任意分頁的存儲過程結合在一起,看起來好不復雜,而我現在沒必要搞分頁,沒有辦法實現嗎???
我先按常理搞了一個這樣的:
select * from SiteDetailInfo where SiteBasicId = SiteId And SiteIsCheck = 1 order by @Parameter desc
在查詢分析器中運行報錯:
ORDER BY 子句所標識的第 %1! 個 SELECT 項包含了一個變量,該變量位於標識列位置的表達式中。只有排序依據表達式引用的是列名時,才允許在該表達式中使用變量。
好像語法上有問題,這是意料之中的,隱約記得應該加上單引號之類的,問了一下網友史帝爾,很快就丟過答案過來了,果然是有點語法上的問題.
修正如下:
create procedure proc_test
@fieldname varchar(50)
as
declare @sql varchar(1000)
set @sql= "update [table] set " + @fieldname + "= " + @fieldname + "+1 "
exec(@sql)
go
或者:
declare @field varcahr(10)
update table (case @field when "字段1名 " then set 字段1 = 字段1 + 1
when "字段2名 " then set 字段2 = 字段2 + 1
.... end)