Aracılığıyla paylaş


İfadeler (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

SQL Server Veritabanı Altyapısı'nın tek bir veri değeri elde etmek için değerlendirdiğini simgeler ve işleçlerin birleşimi. Basit ifadeler tek bir sabit, değişken, sütun veya skaler işlev olabilir. İşleçler, iki veya daha fazla basit ifadeyi karmaşık bir ifadeye birleştirmek için kullanılabilir.

Transact-SQL söz dizimi kuralları

Syntax

SQL Server ve Azure SQL Veritabanı için söz dizimi.

{ constant | scalar_function | [ table_name. ] column | variable
    | ( expression ) | ( scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
    | ranking_windowed_function | aggregate_windowed_function
}

Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi.

-- Expression in a SELECT statement
<expression> ::=
{
    constant
    | scalar_function
    | column
    | variable
    | ( expression )
    | { unary_operator } expression
    | expression { binary_operator } expression
}
[ COLLATE Windows_collation_name ]

-- Scalar Expression in a DECLARE , SET , IF...ELSE , or WHILE statement
<scalar_expression> ::=
{
    constant
    | scalar_function
    | variable
    | ( expression )
    | (scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
}
[ COLLATE [ Windows_collation_name ] ]

Arguments

sabit

Tek, belirli bir veri değerini temsil eden bir simge. Daha fazla bilgi için bkz. Sabitler.

scalar_function

Belirli bir hizmet sağlayan ve tek bir değer döndüren Transact-SQL söz dizimi birimi. scalar_function, , SUMveya işlevleri veya GETDATE() skaler kullanıcı tanımlı işlevler gibi CASTyerleşik skaler işlevler olabilir.

table_name

Tablonun adı veya diğer adı.

column

Sütunun adı. bir ifadede yalnızca sütunun adına izin verilir.

variable

Değişkenin veya parametrenin adı. Daha fazla bilgi için bkz. DECLARE @local_variable.

expression

Bu makalede tanımlanan geçerli ifadeler. Parantezler, sonuçta elde edilen ifade başka bir ifadeyle birleştirilmeden önce ifadedeki tüm işleçlerin değerlendirilmesini sağlayan gruplandırma işleçleridir.

scalar_subquery

Bir değer döndüren bir alt sorgu. Örneğin:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

Tekli işleçler yalnızca sayısal veri türü kategorisinin veri türlerinden herhangi birini değerlendiren ifadelere uygulanabilir. Yalnızca bir sayısal işleneni olan bir işleçtir:

  • + pozitif bir sayıyı gösterir
  • - negatif bir sayıyı gösterir
  • ~ tamamlayıcı işlecini gösterir

binary_operator

tek bir sonuç elde etmek için iki ifadenin nasıl birleştirildiğini tanımlayan bir işleç. binary_operator aritmetik işleç, atama işleci (=), bit düzeyinde işleç, karşılaştırma işleci, mantıksal işleç, dize birleştirme işleci (+) veya bir birli işleç olabilir. İşleçler hakkında daha fazla bilgi için bkz . İşleçler.

ranking_windowed_function

Herhangi bir Transact-SQL derecelendirme işlevi. Daha fazla bilgi için bkz . Derecelendirme İşlevleri.

aggregate_windowed_function

OVER yan tümcesiyle Transact-SQL toplama işlevi. Daha fazla bilgi için bkz. SELECT - OVER yan tümcesi.

İfade sonuçları

Tek bir sabitten, değişkenden, skaler işlevden veya sütun adından oluşan basit bir ifade için: ifadenin veri türü, harmanlama, duyarlık, ölçek ve değeri, başvuruda bulunulan öğenin veri türü, harmanlaması, duyarlığı, ölçeği ve değeridir.

karşılaştırma veya mantıksal işleçler kullanılarak iki ifade birleştirildiğinde, sonuçta elde edilen veri türü Boole değeridir: TRUE, FALSEveya UNKNOWN. Boole veri türleri hakkında daha fazla bilgi için bkz . Karşılaştırma İşleçleri.

aritmetik, bit düzeyinde veya dize işleçleri kullanılarak iki ifade birleştirildiğinde, işleç sonuçta elde edilen veri türünü belirler.

Birçok simgeden ve işleçten oluşan karmaşık ifadeler tek değerli bir sonuç olarak değerlendirilir. Sonuçta elde edilen ifadenin veri türü, harmanlaması, duyarlığı ve değeri, son sonuc ulaşılana kadar bileşen ifadeleri bir kerede iki kez birleştirilerek belirlenir. İfadelerin birleştirildiği sıra, ifadedeki işleçlerin önceliği tarafından tanımlanır.

Remarks

her ikisi de işleç tarafından desteklenen veri türlerine sahipse ve bu koşullardan en az biri doğruysa, iki ifade bir işleç tarafından birleştirilebilir:

  • İfadeler aynı veri türüne sahiptir.

  • Daha düşük önceliğe sahip veri türü örtük olarak daha yüksek veri türü önceliği olan veri türüne dönüştürülebilir.

İfadeler bu koşulları karşılamıyorsa veya CASTCONVERT işlevleri kullanılabilir. Daha düşük önceliğe sahip veri türünü açıkça daha yüksek önceliğe sahip veri türüne veya örtük olarak daha yüksek önceliğe sahip veri türüne dönüştürülebilecek bir ara veri türüne dönüştürmek için veya CAST kullanınCONVERT.

Desteklenen örtük veya açık dönüştürme yoksa, iki ifade birleştirilemiyor.

Karakter dizesini değerlendiren herhangi bir ifadenin harmanlaması, harmanlama önceliği kurallarına uyularak ayarlanır. Daha fazla bilgi için Harmanlama önceliği'e bakın.

C veya Microsoft Visual Basic gibi bir programlama dilinde bir ifade her zaman tek bir sonuç olarak değerlendirilir. Transact-SQL seçme listesindeki ifadeler bu kuraldaki bir varyasyonu izler: İfade, sonuç kümesindeki her satır için ayrı ayrı değerlendirilir. Tek bir ifade, sonuç kümesinin her satırında farklı bir değere sahip olabilir, ancak her satırın ifade için yalnızca bir değeri vardır. Örneğin, aşağıdaki SELECT deyimde hem başvuru ProductID hem de seçme listesindeki terim 1+2 ifadelerdir:

USE AdventureWorks2022;
GO

SELECT ProductID, 1 + 2
FROM Production.Product;
GO

İfade 1+2 , sonuç kümesindeki her satırda olarak değerlendirilir 3 . İfade ProductID her sonuç kümesi satırında benzersiz bir değer oluştursa da, her satır için ProductIDyalnızca bir değere sahiptir.

  • Azure Synapse Analytics, hiçbir iş parçacığının tüm belleği kullanabilmesi için her iş parçacığına sabit bir maksimum bellek ayırır. Bu belleklerden bazıları sorguların ifadelerini depolamak için kullanılır. Sorguda çok fazla ifade varsa ve gerekli belleği iç sınırı aşarsa altyapı bunu yürütmez. Bu sorunu önlemek için, kullanıcılar sorguyu daha az sayıda ifade içeren birden çok sorguya dönüştürebilir. Örneğin, WHERE yan tümcesinde ifadelerin uzun bir listesini içeren bir sorgunuz var:
DELETE
FROM dbo.MyTable
WHERE (c1 = '0000001' AND c2 = 'A000001')
    OR (c1 = '0000002' AND c2 = 'A000002')
    OR (c1 = '0000003' AND c2 = 'A000003')
/* ... additional, similar expressions omitted for simplicity */

Bu sorguyu şu şekilde değiştirin:

DELETE FROM dbo.MyTable WHERE (c1 = '0000001' AND c2 = 'A000001');
DELETE FROM dbo.MyTable WHERE (c1 = '0000002' AND c2 = 'A000002');
DELETE FROM dbo.MyTable WHERE (c1 = '0000003' AND c2 = 'A000003');
/* ... refactored, individual DELETE statements omitted for simplicity  */