這樣寫就行了。如果比是1,2,3,就return返回。
if proct_type not in (1, 2, 3) then
return;
end if;
如果proct_type是字元串變數:
if proct_type not in ('1', '2', '3') then
return;
end if;
㈡ 關於SQL存儲過程的問題where中條件語句的累加
把思路放開一下,你這個存儲過程其實所需要做得事情就是根據你的邏輯判斷來組織後面的查詢語句,
你可以的存儲過程可以這樣,把你組織條件的語句放在程序中,查詢的時候只傳給存儲過程一個組織
好的條件進行查詢就可以了,這樣你的
if
else判斷就無需放在存儲過程中了
ALTER
PROCEDURE
[dbo].[kaoqinView_GetList]
@condition
nvarchar(4000),
AS
declare
@sql
nvarchar(4000)
set @sql='
SELECT
[kaoqinId],
[name],
[employeeId],
[year],
[month],
[overHour],
[chiDao],
[zaoTui],
[kuangGong]
FROM
[SMS_DB].[dbo].[kaoqinView]
where
1=1
'
+
@condition
exec(@sql)
go
當然如果你一定要把
if
else
判斷放在存儲過程中也可以,原理差不多,先通過判斷拼接出查詢條件,然後再將查詢語句與查詢條件拼接起來
通過exec來進行執行
就可以了
㈢ 存儲過程中用什麼來判斷sql語句是否執行成功
Transact-SQL 參考
@@ERROR
返回最後執行的 Transact-SQL 語句的錯誤代碼。
語法
@@ERROR
返回類型
integer
注釋
當 Microsoft® SQL Server™ 完成 Transact-SQL 語句的執行時,如果語句執行成功,則 @@ERROR 設置為 0。若出現一個錯誤,則返回一條錯誤信息。@@ERROR 返回此錯誤信息代碼,直到另一條 Transact-SQL 語句被執行。您可以在 sysmessages 系統表中查看與 @@ERROR 錯誤代碼相關的文本信息。
由於 @@ERROR 在每一條語句執行後被清除並且重置,應在語句驗證後立即檢查它,或將其保存到一個局部變數中以備事後查看。
示例
A.用 @@ERROR 檢測一個特定錯誤
下面的示例用 @@ERROR 在一個 UPDATE 語句中檢測限制檢查沖突(錯誤 #547)。
USE pubs
GO
UPDATE authors SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"
IF @@ERROR = 547
print "A check constraint violation occurred"
B.用 @@ERROR 有條件地退出一個過程
在此示例中,IF...ELSE 語句在存儲過程中的 INSERT 語句後檢測 @@ERROR。@@ERROR 變數的值將決定傳給調用程序的返回值,以指示此過程的成功與失敗。
USE pubs
GO
-- Create the procere.
CREATE PROCEDURE add_author
@au_id varchar(11),@au_lname varchar(40),
@au_fname varchar(20),@phone char(12),
@address varchar(40) = NULL,@city varchar(20) = NULL,
@state char(2) = NULL,@zip char(5) = NULL,
@contract bit = NULL
AS
-- Execute the INSERT statement.
INSERT INTO authors
(au_id, au_lname, au_fname, phone, address,
city, state, zip, contract) values
(@au_id,@au_lname,@au_fname,@phone,@address,
@city,@state,@zip,@contract)
-- Test the error value.
IF @@ERROR <> 0
BEGIN
-- Return 99 to the calling program to indicate failure.
PRINT "An error occurred loading the new author information"
RETURN(99)
END
ELSE
BEGIN
-- Return 0 to the calling program to indicate success.
PRINT "The new author information has been loaded"
RETURN(0)
END
GO
C.用 @@ERROR 檢測幾條語句的成功
下面的示例取決於 INSERT 和 DELETE 語句的成功操作。局部變數在兩條語句後均被設置為 @@ERROR 的值,並且用於此操作的共享錯誤處理常式中。
USE pubs
GO
DECLARE @del_error int, @ins_error int
-- Start a transaction.
BEGIN TRAN
-- Execute the DELETE statement.
DELETE authors
WHERE au_id = '409-56-7088'
-- Set a variable to the error value for
-- the DELETE statement.
SELECT @del_error = @@ERROR
-- Execute the INSERT statement.
INSERT authors
VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
'6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
-- Set a variable to the error value for
-- the INSERT statement.
SELECT @ins_error = @@ERROR
-- Test the error values.
IF @del_error = 0 AND @ins_error = 0
BEGIN
-- Success. Commit the transaction.
PRINT "The author information has been replaced"
COMMIT TRAN
END
ELSE
BEGIN
-- An error occurred. Indicate which operation(s) failed
-- and roll back the transaction.
IF @del_error <> 0
PRINT "An error occurred ring execution of the DELETE
statement."
IF @ins_error <> 0
PRINT "An error occurred ring execution of the INSERT
statement."
ROLLBACK TRAN
END
GO
D. 與 @@ROWCOUNT 一同使用 @@ERROR
下面的示例用 @@ERROR 和 @@ROWCOUNT 驗證一條 UPDATE 語句的操作。為任何可能出現的錯誤而檢驗 @@ERROR 的值,而用 @@ROWCOUNT 保證更新已成功應用於表中的某行。
USE pubs
GO
CREATE PROCEDURE change_publisher
@title_id tid,
@new_pub_id char(4)
AS
-- Declare variables used in error checking.
DECLARE @error_var int, @rowcount_var int
-- Execute the UPDATE statement.
UPDATE titles SET pub_id = @new_pub_id
WHERE title_id = @title_id
-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT
-- Check for errors. If an invalid @new_pub_id was specified
-- the UPDATE statement returns a foreign-key violation error #547.
IF @error_var <> 0
BEGIN
IF @error_var = 547
BEGIN
PRINT "ERROR: Invalid ID specified for new publisher"
RETURN(1)
END
ELSE
BEGIN
PRINT "ERROR: Unhandled error occurred"
RETURN(2)
END
END
-- Check the rowcount. @rowcount_var is set to 0
-- if an invalid @title_id was specified.
IF @rowcount_var = 0
BEGIN
PRINT "Warning: The title_id specified is not valid"
RETURN(1)
END
ELSE
BEGIN
PRINT "The book has been updated with the new publisher"
RETURN(0)
END
GO
㈣ 如何判斷SQL中是否已經存在某表,存儲過程,函數等
1、是否存在某表的判斷
ifexists(='表名'andxtype='U')
begin
--存在
end
2、是否存在某存儲過程的判斷
ifexists(='存儲過程名'andxtype='P')
begin
--存在
end
3、是否存在某函數的判斷
ifexists(='函數名'andxtype='FN')
begin
--存在
end
㈤ SQL存儲過程中,if判斷語句中有多個判斷條件時,要用括弧括.嗎
如果像你這個只是單純的or的話,這兩種寫法應該都可以。
可是如果是有and又有or,那麼就需要你先把這個條件的先後分清楚了,這樣的情況,肯定需要括弧括清楚每一層。
㈥ mssql里的一個存儲過程判斷,請寫出代碼
設計得很復雜,卻又不能好好地命名欄位:(
CREATEPROCEDUREfun(
@mint
,@nint
)AS
BEGIN
SELECTF3
,SUM(Value)--合並Tx
FROM(
SELECTID
,F3
,min(@n,F2)--取結束值中小的
-max(@m,F1)--取起始值中大的
ASValue
FROMTable1
WHERE@m>=F1AND@n<=F2
)--先計算每行中F3的計算值
GROUPBYF3
ORDERBYF3
END
㈦ SQL存儲過程中,if判斷語句中有多個判斷條件時,要用括弧括.
如果像你這個只是單純的or的話,這兩種寫法應該都可以.
可是如果是有and又有or,那麼就需要你先把這個條件的先後分清楚了,這樣的情況,肯定需要括弧括清楚每一層.
㈧ SQL存儲過程中,if判斷語句中有多個判斷條
if(@rq2 is null or @rq2!=@a11) //多個判斷條件
begin
處理
end
else
begin
處理
end
㈨ sql2008存儲過程中判斷條件,若輸入的是-1(此時不考慮時間),則輸出所有結果,若時間不在表中
看看你的存儲過程的源代碼,大家幫你分析一下
㈩ sql存儲過程中根據判斷拼接sql語句然後執行
有圖有真相