عمود بت محسوب يعيد ما إذا كان عمود آخر فارغ
-
13-09-2019 - |
سؤال
أحاول الحصول على هذا العمود المحسوب:
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
).
لا تنتمي إلى StackOverflow