⑴ sql 中如何比較數據,並返回一個結果,簡單語句能實現嘛,存儲過程能實現嘛,詳細如下
1.
1條sql語句能寫,只是分支太多,語句效率估計會慢死。
(1)三表關聯(新糧表,化驗單,檢驗單,根據grainID關聯),組成一個新的有別名的臨時表。
(select語句) as XX
根據grainID的相同的關系,找到你要的數據,比如新糧表的grainType,檢驗單的 testResult等。
(2)上面的XX臨時表與制度表關聯(根據grainType)
按照你的說法,項目一共有,蟲蝕,病斑,破碎,生芽,發霉,損傷六項,必須全部合格,才顯示testResult,否則顯示「某某不合格」,那麼就存在一個問題,如果有兩項或者三項不合格,那麼是不是兩項或者三項都要顯示,如果這樣的話,那麼case when的分支就要寫的非常多,是一個組合的關系,有一項不合格的有6個,有兩項不合格的有15個,有三項不合格的有30個,四項15種,5項6種,6項1種,再加上合格的1種情況,加起來case when 要寫1+6+15+20+15+6+1=64種情況,那麼這條語句會很長,而且運行起來真的很慢。
如果只是每次找出一個就行,那麼就可能會出現這次是蟲蝕不合格,下次是病斑不合格這種可能,這樣也不太好,個人覺得最好一次說明白。
2.存儲過程怎麼辦
存儲過程自己實現的話,那麼和上面的一條語句差不多,也是比較麻煩的,畢竟他要返回所有可能的結果,然後反饋給前台,這樣的話,其實和一條語句差不太多。
3.個人認為比較靠譜的辦法
也是存儲過程的,但是並不是用存儲過程輸出全部結果,只輸出對比結果,比如(僅為舉例)輸出一個結果集(010100),那麼前台就可以解讀這個字元串為「病斑生芽不合格」,這樣速度就會快很多。
⑵ sql 條件判斷的返回值
/*
sql 條件對比的返回值是什麼呢?
*/
IF 1=1 SELECT 'OK'
--SQL條件判斷返回布爾值,但SQL布爾值沒有常量true/false來表示,因此:
--true -> 1=1
--false -> 1=0
⑶ SQL裡面查詢判定,並且返回結果
select distinct ty_no, case when exists(select 1 from 表 b where b.ty_no=a.ty_no and b.prc_id='不合格') then '不合格' else '合格' end prc_id from 表 a
⑷ 如何用sql語句的iif函數 判斷如果 為空 就返回
如何用sql語句的iif函數 判斷如果 為空 就返回
SQL數據存儲中,所謂的空,有兩種形式,具體如下:
1、NULL:這是真正意義上的空,假如欄位名為col1,判斷方法為:
1
CASE THEN col1 IS NULL WHEN '為空' ELSE '不為空' END
2、空白:這種是表示空白字元串,假如欄位名為col1,判斷方法為:
1
CASE THEN col1 = '' WHEN '為空' ELSE '不為空' END
⑸ sql如何根據一列的值判斷返回一個值
if exists ( select 1 from A where b = 'false' )
return false
else
return true
就是判斷,只要有存在false就返回false ,否則返回true。
⑹ sql語句中if判斷條件怎麼寫
sql語句中if判斷條件是結合select語句使用的。IF函數也能通過判斷條件來返回特定值,它的語法如下:IF(expr,result_true,result_false)。
expr是一個條件表達式,如果結果為true,則返回result_true,否則返回result_false。在一些場景中,IF函數和CASE WHEN是有同樣效果的,前者相對簡單,後者能應對更復雜的判斷。另外,IF函數還可以和聚合函數結合。
SQL其他情況簡介。
SQL是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。
結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。
⑺ 如何判定這條sql語句的返回值
<%
sql = "select max(tptime) as onw from tpip where ip ='127.0.01' and id=12"
set rs = conn.execute(sql)
if isnull(rs("onw")) then
response.Write("沒有對應的tptime")
else
response.Write("id為12,ip為127.0.01的最晚tptime是" & rs("onw"))
end
set rs = nothing
%>
假設conn是已經定義的數據連接
⑻ 如何驗證SQL的select是否有返回值
幾種方式:
1.單一的select語句:select count(1) from dba_users where username = '用戶名';
通過count的值是否為0來判斷是否有這個用戶
2.存儲過程中通過異常來判斷
begin
select username into lv_username from dba_users where username = '用戶名';
exception no_data_found then
-- 沒有找到就可以新建用戶
end;
這兩種方式是我覺得比較簡單的了。希望能夠對你有幫助。
⑼ 動態執行sql語句是否有返回值可以判斷是否成功
返回執行的上一個 Transact-SQL 語句的錯誤號。
Transact-SQL 語法約定
語法
@@ERROR
返回類型
integer
備注
如果前一個 Transact-SQL 語句執行沒有錯誤,則返回 0。
如果前一個語句遇到錯誤,則返回錯誤號。如果錯誤是 sys.messages 目錄視圖中的錯誤之一,則 @@ERROR 將包含 sys.messages.message_id 列中表示該錯誤的值。可以在 sys.messages 中查看與 @@ERROR 錯誤號相關的文本信息。
由於 @@ERROR 在每一條語句執行後被清除並且重置,因此應在語句驗證後立即查看它,或將其保存到一個局部變數中以備以後查看。
使用 TRY...CATCH 構造來處理錯誤。TRY...CATCH 構造也支持其他返回的錯誤信息多於 @@ERROR 的系統函數(ERROR_LINE、ERROR_MESSAGE、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE)。TRY...CATCH 也支持 ERROR_NUMBER 函數,但不限制該函數在語句產生錯誤後立即在語句中返回錯誤號。有關詳細信息,請參閱 TRY...CATCH (Transact-SQL)。
示例
A. 用 @@ERROR 檢測一個特定錯誤
以下示例用 @@ERROR 在 UPDATE 語句中檢測約束檢查沖突(錯誤 #547)。
復制代碼
USE AdventureWorks;
GO
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 4
WHERE EmployeeID = 1;
IF @@ERROR = 547
PRINT N'A check constraint violation occurred.';
GO
B. 用 @@ERROR 有條件地退出一個過程
在此示例中,IF...ELSE 語句在存儲過程中的 INSERT 語句後檢測 @@ERROR。@@ERROR 變數的值將決定發送給調用程序的返回代碼,以指示此過程的成功與失敗。
復制代碼
USE AdventureWorks;
GO
-- Drop the procere if it already exists.
IF OBJECT_ID(N'HumanResources.usp_DeleteCandidate', N'P') IS NOT NULL
DROP PROCEDURE HumanResources.usp_DeleteCandidate;
GO
-- Create the procere.
CREATE PROCEDURE HumanResources.usp_DeleteCandidate
(
@CandidateID INT
)
AS
-- Execute the DELETE statement.
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = @CandidateID;
-- Test the error value.
IF @@ERROR <> 0
BEGIN
-- Return 99 to the calling program to indicate failure.
PRINT N'An error occurred deleting the candidate information.';
RETURN 99;
END
ELSE
BEGIN
-- Return 0 to the calling program to indicate success.
PRINT N'The job candidate has been deleted.';
RETURN 0;
END;
GO
C. 與 @@ROWCOUNT 一同使用 @@ERROR
下面的示例用 @@ERROR 和 @@ROWCOUNT 驗證一條 UPDATE 語句的操作。為任何可能出現的錯誤而檢驗 @@ERROR 的值,而用 @@ROWCOUNT 保證更新已成功應用於表中的某行。
⑽ sql語句對select語句的返回值進行判斷
SELECT decode(log_mode, 'NOARCHIVELOG', 0, 1) from v$database;