Bagikan melalui


BEBERAPA | ANY (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Membandingkan nilai skalar dengan sekumpulan nilai kolom tunggal. BEBERAPA dan APA PUN setara.

Konvensi sintaks transact-SQL

Sintaks

scalar_expression { = | <> | != | > | >= | !> | < | <= | !< }   
     { SOME | ANY } ( subquery )   

Argumen

scalar_expression
Adalah ekspresi yang valid.

{ = | <> | != | > | >= | !> | < | <= | !< }
Adalah operator perbandingan yang valid.

BEBERAPA | APA SAJA

Menentukan bahwa perbandingan harus dibuat.

kueri bertumpuk

Adalah subkueri yang memiliki kumpulan hasil dari satu kolom. Jenis data kolom yang dikembalikan harus tipe data yang sama dengan scalar_expression.

Jenis hasil

Boolean

Nilai hasil

SOME atau ANY mengembalikan TRUE ketika perbandingan yang ditentukan adalah TRUE untuk pasangan apa pun (scalar_expression, x) di mana x adalah nilai dalam kumpulan kolom tunggal; jika tidak, mengembalikan FALSE.

Keterangan

BEBERAPA mengharuskan scalar_expression membandingkan secara positif dengan setidaknya satu nilai yang dikembalikan oleh subkueri. Untuk pernyataan yang mengharuskan scalar_expression membandingkan secara positif dengan setiap nilai yang dikembalikan oleh subkueri, lihat SEMUA (Transact-SQL). Misalnya, jika subkueri mengembalikan nilai 2 dan 3, scalar_expression = SOME (subkueri) akan dievaluasi sebagai TRUE untuk scalar_express 2. Jika subkueri mengembalikan nilai 2 dan 3, scalar_expression = ALL (subkueri) akan dievaluasi sebagai FALSE, karena beberapa nilai subkueri (nilai 3) tidak akan memenuhi kriteria ekspresi.

Contoh

J. Menjalankan contoh sederhana

Pernyataan berikut membuat tabel sederhana dan menambahkan nilai 1, , 23, dan 4 ke ID kolom .

CREATE TABLE T1  
(ID INT) ;  
GO  
INSERT T1 VALUES (1) ;  
INSERT T1 VALUES (2) ;  
INSERT T1 VALUES (3) ;  
INSERT T1 VALUES (4) ;  

Kueri berikut mengembalikan TRUE karena 3 kurang dari beberapa nilai dalam tabel.

IF 3 < SOME (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;  

Kueri berikut mengembalikan FALSE karena 3 tidak kurang dari semua nilai dalam tabel.

IF 3 < ALL (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;  

B. Menjalankan contoh praktis

Contoh berikut membuat prosedur tersimpan yang menentukan apakah semua komponen yang ditentukan SalesOrderID dalam AdventureWorks2022 database dapat diproduksi dalam jumlah hari yang ditentukan. Contoh menggunakan subkueri untuk membuat daftar jumlah DaysToManufacture nilai untuk semua komponen tertentu SalesOrderID, lalu menguji apakah salah satu nilai yang dikembalikan oleh subkueri lebih besar dari jumlah hari yang ditentukan. Jika setiap nilai DaysToManufacture yang dikembalikan kurang dari angka yang disediakan, kondisinya adalah TRUE dan pesan pertama dicetak.

-- Uses AdventureWorks

CREATE PROCEDURE ManyDaysToComplete @OrderID INT, @NumberOfDays INT  
AS  
IF   
@NumberOfDays < SOME  
   (  
    SELECT DaysToManufacture  
    FROM Sales.SalesOrderDetail  
    JOIN Production.Product   
    ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID   
    WHERE SalesOrderID = @OrderID  
   )  
PRINT 'At least one item for this order can''t be manufactured in specified number of days.'
ELSE   
PRINT 'All items for this order can be manufactured in the specified number of days or less.' ;

Untuk menguji prosedur, jalankan prosedur dengan menggunakan SalesOrderID``49080, yang memiliki satu komponen yang memerlukan 2 hari dan dua komponen yang membutuhkan 0 hari. Pernyataan pertama memenuhi kriteria. Kueri kedua tidak.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Berikut set hasilnya.

All items for this order can be manufactured in the specified number of days or less.

EXECUTE ManyDaysToComplete 49080, 1 ;  

Berikut set hasilnya.

At least one item for this order can't be manufactured in specified number of days.

Lihat juga