最近在學習期間接觸了動態sql操作,然後小總結了一下給出自己的心得。
在我們的專案中經常需要用到分面功能,而我以前呢用的方法現在看起來都是那麼的笨拙,當時是這樣做的,每當要進行資料分頁時就專們針對那個表做分頁,大家別笑,以前確實好笨。呵呵,雖然當時也有乙個想法就是希望能夠傳入一張表進去進行操作,但那樣的話編譯是通不過的,因為from後面操作的是表變數,而不能是我們自定義的變數,所以當時沒有深追究,現在為當時不深入學習而bs一下。
動態sql需要準備以下內容:1、@sql 拼接後的sql語句,可以是你任意需要的sql語句如:set @sql='select * from table where
id=@id'
注意此處的@sql必須且只能是ntext、nvarchar、nchar型別,如果是其它型別的話其它地方明明沒有問題卻會報 "過程需要型別為 'ntext/nchar/nvarchar' 的引數"這個錯誤。同時,如果這裡需要傳入表名稱的話則應這樣寫:set @sql='select * from '+@table+'where
id=@id'
,因為上面傳入的值是文字型別故會報錯。
2、@parameters 所拼接的sql語句裡面的引數,按上面的話這裡應該是:set @parameters='@id int' 同時這個引數的型別也必須且只能是ntext、nvarchar、nchar型別
3、呼叫:sp_executesql param1(,param2) 其中param1一般我們作為是@sql,後面的引數則是我們在@sql中的引數了,但這裡要注意的是傳參的時候必須是對應的:
declare @inputid int ;
set @inputid=1;
param2為:@id=@inputid;
以下是寫的乙個簡單的通用分頁,有需要可以自行修改:
alter procedure sp_pager
( @tablename nvarchar(50), -- 表名
@returnfields nvarchar(200) = '*', -- 需要返回的列
@pagesize int = 50, -- 每頁記錄數
@pageindex int = 1 -- 當前頁碼
) as
declare @sql nvarchar(1000)
declare @paramters nvarchar(200)
begin
set nocount on
set @sql='select '+@returnfields+' from '+@tablename+' where id>(select top 1 id from (select top '+cast(@pagesize*@pageindex as varchar)+' id from '+@tablename+ ' order by id )as a order by id desc)'
print @sql
execute sp_executesql @sql,@paramters,@columns=@returnfields
end
動態SQL語句
動態使用sql語句的幾點技巧 動態sql語句,就是sql語句中引數會變化的sql語句,一般在程式中要根據使用者的需要隨時改變其引數值,對於動態sql語句必須注意以下幾點 先呼叫close方法,關閉query元件。如果query元件已經關閉,呼叫close方法不會出錯,也沒有其它影響。再呼叫clear...
動態SQL語句
動態sql語句 1.if 條件 2.choose,where 和 otherwise 條件 3.where 條件 4.trim 條件 5.foreach 迴圈 6.set 條件 7.bind if 有條件的包含where子句的一部分 比如 select from blog where state a...
動態SQL語句
dao的方法 update的配置方法 使用update標籤和set標籤實現動態生成sql語句 當nickname,birthday,email,pic屬性不為空,而且不為空串,則設定值 步驟在resources目錄下建立資料夾,注意 資料夾不是點號,而是斜槓。在目錄下建立userdao.xml配置檔...