sql存儲過程like
① sql SERVER 2005 存儲過程中怎樣使用 like.
這個應該是說看錶是否有外鍵關系。方法是,在SQL
SERVER
2005的Management但反復執行的動態SQL,可以使用臨時存儲過程,該過程(臨時表)被放在Tempdb中。
② sql存儲過程中,模糊查詢的寫法
ALTER PROCEDURE [dbo].[pro_Search_keys]
@keys nvarchar(max)
AS
BEGIN
SELECT*
FROM text_Text
where Title like 『%』+@keys+『%』
END
③ SQL:存儲過程中的like問題!
like '%'+rtrim(@para1)+'%'
④ SQL存儲過程(含變數)like語句實現不了
@Depart char
首先不要用char,除非你能明確確定字數
其次字元類型一定要標注長度
改為@Depart nvarchar(20)試試
⑤ 關於sql存儲過程的相似查詢
因為like @date這樣將@date整體看做一個變數,或者說將其內部代表的值看做變數,%不在是通配符,而是被轉義為一個普通字元
⑥ 有關SQL存儲過程變數模糊查詢
select
*
from
user
where
user_name
like
'%'
||
變數
||
'%'
這樣寫就可以了。
⑦ sql語句執行指定存儲過程在參數字元串中加like對引號的處理
當前有一存儲過程
執行的時候
exec
的第一個參數需要加like語句
如
exec
proc_page
'info2
where
id
not
in(
select
top
(0)
id
from
info2
where
centerclass=152
and
bigcity=1
and
centercity=7
order
by
id
desc)
and
bigcity=1
and
centercity=7
and
centerclass=152
and
smallsubclassinfo
like
''%'||小型犬||'%''
'
,'*',10,10,'id',1,'','id',0
請問對like旁的單引號大家都如何處理才能使存儲過程正確執行?
⑧ SQL 存儲過程
仔細思考一下我的解決辦法是否妥當:
因為過程開頭部分已經定義了4個變數,並且都賦初值為'0',
那麼,我們做兩處變動:
1、在你的select語句執行前,我們寫上4個判斷,判斷這4個變數是否被傳入了值,未傳入時怎麼樣處理。
2、修改select語句的where子句(語句中有三個「=」改成like)。
過多的描述也許難以看懂,我直接寫出來,新增或修改的部分,我在後面用了注釋「//--★」(我的寫法是基於Sybase的,你可以看懂的。當然你也可以先看一下後面的【總結】):
if exists(………………………………)
drop ……………………
go
create Proc Proc_ManualSign
@BranchId varchar(10) = '0',
……………………
……………………
@UserName varchar(50) = '0'
as
begin //--★sybase寫法,用於過程開始,參考你的資料庫,看是否需要加
if @BranchId = '0' //--★如果@BranchId依然為初始值(未傳入參數)
select @BranchId = '%' //--★那麼將@BranchId賦值為'%'
if @DepartId = '0' //--★如果@DepartId依然為初始值(未傳入參數)
select @DepartId = '%' //--★那麼將@DepartId賦值為'%'
if @UserId = '0' //--★如果@UserId依然為初始值(未傳入參數)
select @UserId = '%' //--★那麼將@UserId賦值為'%'
if @UserName = '0' //--★如果@UserName依然為初始值(未傳入參數)
select @UserName = '%' //--★那麼將@UserName賦值為'%'
select …………
……………………
and b.BranchId like @BranchId --機構 //--★你原來的「=」改成了「like」
and d.DepartId like @DepartId --部門 //--★你原來的「=」改成了「like」
and m.UserId like @UserId --用戶Id //--★你原來的「=」改成了「like」
and u.UserName like '%'+@UserName+'%' --用戶名
end //--★sybase寫法,用於標注過程結束,參考你的資料庫,看是否需要加
go
======================================================================
【★★--總結--★★】我的辦法:
4個變數初值為'0',excute執行該過程時,if語句就要依次判斷各變數的當前值,判斷的結果無非兩種:①.未傳入值(還是'0'),②.傳入了值(不是'0')
①.未傳入值
if語句判斷出某變數未傳入值,則將該變數置為'%',那麼select語句的where條件中就是該欄位 like '%',也就是該欄位的檢索條件為任意的。
②.傳入了值
傳入了值,則if語句的判斷結果為假(False),那麼直接跳出判斷去執行select語句,雖然where子句的條件中用的是 like 介詞,但沒有通配符'%'的話,like 的作用也就是'=',即:【like '銷售部'】的作用也就是 【='銷售部'】,所以也滿足了輸入參數的精確查詢要求。
執行時:
假如什麼參數也不傳入,即:查詢全部的信息
excute Proc_ManualSign '0', '0', '0', '0'
假如僅部門和用戶ID傳入參數,則
excute Proc_ManualSign '0', '開發部', '319', '0'
⑨ 在SQL中存儲過程的一般語法是什麼
1、 創建語法
createproc|procerepro_name
[{@參數數據類型}[=默認值][output],
{@參數數據類型}[=默認值][output],
....
]
as
SQL_statements
2、 創建不帶參數存儲過程
--創建存儲過程
if(exists(select*fromsys.objectswherename='proc_get_student'))
dropprocproc_get_student
go
createprocproc_get_student
as
select*fromstudent;
--調用、執行存儲過程
execproc_get_student;
3、 修改存儲過程
--修改存儲過程
alterprocproc_get_student
as
select*fromstudent;
4、 帶參存儲過程
--帶參存儲過程
if(object_id('proc_find_stu','P')isnotnull)
dropprocproc_find_stu
go
createprocproc_find_stu(@startIdint,@endIdint)
as
select*fromstudentwhereidbetween@startIdand@endId
go
execproc_find_stu2,4;
5、 帶通配符參數存儲過程
--帶通配符參數存儲過程
if(object_id('proc_findStudentByName','P')isnotnull)
dropprocproc_findStudentByName
go
createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')
as
select*fromstudentwherenamelike@nameandnamelike@nextName;
go
execproc_findStudentByName;execproc_findStudentByName'%o%','t%';
(9)sql存儲過程like擴展閱讀:
SQL存儲過程優點:
1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。