سؤال

أحاول الحصول على هذا العمود المحسوب:

CREATE TABLE dbo.Item
(
    ItemId int NOT NULL IDENTITY (1, 1),
    SpecialItemId int NULL,
    --I tried this
    IsSpecialItem AS ISNULL(SpecialItemId, 0) > 0, 
    --I tried this
    IsSpecialItem AS SpecialItemId IS NOT NULL
    --Both don't work
)  ON [PRIMARY]
هل كانت مفيدة؟

المحلول

هذا يعمل:

CREATE TABLE dbo.Item
(
    ItemId int NOT NULL IDENTITY (1, 1),
    SpecialItemId int NULL,
    IsSpecialItem AS
        CAST(CASE ISNULL(SpecialItemId, 0) WHEN 0 THEN 0 ELSE 1 END AS bit)
)

نصائح أخرى

إجابة مارك بير يسبب خطأ مع nvarchar الأعمدة، والأعمال التالية بغض النظر عما إذا كان العمود int أو nvarchar:

CREATE TABLE dbo.Item
(
    ItemId int NOT NULL IDENTITY (1, 1),
    SpecialItemId [nvarchar](50) NULL,
    CAST(CASE WHEN SpecialItemId Is NULL THEN 0 ELSE 1 END AS bit)
      AS IsSpecialItem 
)

لا يحتوي SQL Server على أي نوع بيانات منطقي حقيقي الأصلي (بمعنى أنه يمكنك استخدام متغير في مكان تعبير منطقي، مثل select * from Item where IsSpecialItem). الطريقة الوحيدة التي يمكنك تمثيلها هي مع شيء مثل مارك يشير، باستخدام القيم المحجوزة (في هذه الحالة، سيكون الاستعلام الخاص بك select * from Item where IsSpecialItem = 1).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top