2013-05-22 9 views
15

Bazı C# kodlarında gömülü SQL sunucusu deyim kullanıyorum; ve sadece tablomda bir sütun olup olmadığını kontrol etmek istiyorum. Sütun (burada ModifiedByUSer) Ben dönmek istiyorum sonra mevcut değilseTabloda sütun olup olmadığını kontrol etmek için CASE deyimini kullanın - SQL Server

bir veya gerçek; Eğer değilse o zaman bir veya yanlış (veya C# ile yorumlanabilen benzer bir şey) dönmek istiyorum. ModifiedByUser sonra yerine dönüş değeri, bir invalid column name alıyorum yoksa

SELECT cast(case WHEN EXISTS (select ModifiedByUser from Tags) 
      THEN 0 
      ELSE 1 
      END as bit) 

Ama:

Ben kadarıyla aşağıdaki gibi bir CASE deyimi kullanmak gibi var.

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser') 
    BEGIN // Do something here to return a value 
    END 

Ama şartlı sonucuna dayanarak bir değer/bool/bit dönmek için nasıl bilmiyorum:

Ben de kabul ettik. Herhangi bir yardım çok takdir!

+0

Bulunduğunuz gibi, standart soru-cevap formatını korumak için sorunun altında bir cevap eklemek daha iyidir. Eklediğin için teşekkürler! – halfer

cevap

20

Final cevap yukarıdakilerden ikisinin kombinasyonu idi (Ben takdirimi göstermek için ikisinide yedim!):

select case 
    when exists (
     SELECT 1 
     FROM Sys.columns c 
     WHERE c.[object_id] = OBJECT_ID('dbo.Tags') 
     AND c.name = 'ModifiedByUserId' 
    ) 
    then 1 
    else 0 
end 
+1

için teşekkürler Orijinal yazı, sonuç ile çalışmak için C# gibi bir şeyden bahsettiğinden beri, aynı zamanda değeri sql'de biraz. Bu şekilde C# aslında bir bool olarak döndürülen değer ile çalışabilir. – BVernon

11
select case 
     when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tags' AND COLUMN_NAME = 'ModifiedByUser') 
     then 0 
     else 1 
     end 
+0

Cevabınız için teşekkürler, ancak sütunun mevcut olup olmadığını her zaman 1 döndürüyor gibi görünüyor. – WheretheresaWill

+0

Cevabınızı aşağıdaki ile bir araya getirdim ve işe yarayacak gibi görünüyor: 'Varsa durumu seçin (SELECT 1 FROM Sys.columns c WHERE c. [Object_id] = OBJECT_ID ('dbo.Tags') VE c.name = 'ModifiedByUserId') o zaman 1 else 0 end' – WheretheresaWill

1

bu bir deneyin -

SELECT * 
FROM ... 
WHERE EXISTS(SELECT 1 
     FROM sys.columns c 
     WHERE c.[object_id] = OBJECT_ID('dbo.Tags') 
      AND c.name = 'ModifiedByUser' 
    ) 
+0

@table_name like 'dbo.table1' – Devart

+0

Bunu nasıl kullanırım? Üzgünüm, SQL ile aşina değil ve bu başımı dolandırmak zor. – WheretheresaWill

+0

Cevabınızı yukarıdaki ile birleştirdim ve işe yarayacak gibi görünüyor: 'Varsa durumu seçin (SELECT 1 FROM Sys.columns c WHERE c. [Object_id] = OBJECT_ID ('dbo.Tags') VE c.name = 'ModifiedByUserId') sonra 1 başka 0 '0' – WheretheresaWill

1

Sen sistemde kontrol edebilirsiniz 'Tablo sütun eşleme' tablosunu

SELECT count(*) 
    FROM Sys.Columns c 
    JOIN Sys.Tables t ON c.Object_Id = t.Object_Id 
WHERE upper(t.Name) = 'TAGS' 
    AND upper(c.NAME) = 'MODIFIEDBYUSER' 
+0

Teşekkürler ama bu bana bir satır 4 için geçersiz bir tablo ismi 'Table_Name' ** veriyor 4. Herhangi bir fikir neden? – WheretheresaWill

+0

@WheretheresaWill .. Benim Bad .. Ben değişiklik ve düzeltme düzeltildi .. şimdi –

3
SELECT * 
FROM ... 
WHERE EXISTS(SELECT 1 
     FROM sys.columns c 
     WHERE c.[object_id] = OBJECT_ID('dbo.Tags') 
      AND c.name = 'ModifiedByUser' 
    ) 
+1

kontrol etmek için teşekkürler radim –

İlgili konular