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.
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
, , 2
3
, 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.