Paul White'ın cevabı hakkındaki "genel olarak hayır" ifadesine göre, umarım aşağıdaki soruya doğrudan bir cevap sunar, ancak aynı zamanda böyle bir sürecin sistemik sınırlamalarını göstermeye hizmet eder ve sizi kolay yönetim ve ifşa etmeyen yöntemlerden uzak tutar riske atar.
Yapabilirsiniz DDL Eğer DML yapıyoruz aynı zaman değiştirir yapmamaya defalarca sayılabilir. İyi programlama, desteklenebilirliği korumak ve spagetti yayılma değişikliklerini önlemek için bu işlevleri ayırır.
Ve Paul'un dikkat çektiği gibi, SQL Server toplu olarak çalışır .
Şimdi, bundan şüphe duyanlar için, muhtemelen sizin örneğinizde değil, 2017 gibi bazı sürümler gerçekten işe yarayabilir! İşte kanıt:
[TEST KODU - SQL Server'ın birçok sürümünde çalışmayabilir]
USE master
GO
CREATE TABLE foo (a VARCHAR(11) )
GO
BEGIN TRANSACTION;
INSERT INTO dbo.foo (a)
VALUES ('entry')
/*****
[2] Check Values
*****/
SELECT a FROM dbo.foo
/*****
[3] Add Column
*****/
ALTER TABLE dbo.foo
ADD b VARCHAR(11)
/*****
[3] Insert value into this new column in the same batch
-- Again, this is just an example. Please do not do this in production
*****/
IF EXISTS (SELECT * FROM sys.columns WHERE object_ID('foo') = object_id
AND name = 'b')
INSERT INTO dbo.foo (b)
VALUES ('d')
COMMIT TRANSACTION;
/*****
[4] SELECT outside transaction
-- this will fail
*****/
--IF EXISTS (SELECT * FROM sys.columns WHERE object_ID('foo') = object_id
-- AND name = 'b')
-- SELECT b FROM dbo.foo
-- this will work...but a SELECT * ???
IF EXISTS (SELECT * FROM sys.columns WHERE object_ID('foo') = object_id
AND name = 'b')
SELECT * FROM dbo.foo
DROP TABLE dbo.foo
[Sonuç]
Evet, DDL ve DML'yi SQL Server'ın @AndriyM - dbfiddle gibi SQL Server'ın belirli sürümleri veya yamaları için aynı toplu işte gerçekleştirebilirsiniz , ancak tüm DML desteklenmez ve bunun her zaman böyle olacağının garantisi yoktur. Çalışırsa, bu SQL Server sürümünüzde bir sapma olabilir ve bu, yeni sürümlere eklerken veya yeni sürümlere geçerken önemli sorunlara neden olabilir.
- Ayrıca, genel olarak tasarımınız değişiklikleri öngörmelidir. Sütunları değiştirmenin / eklemenin bir masada olabileceği endişelerini anlıyorum, ancak toplu olarak bu şekilde doğru bir şekilde tasarlayabilirsiniz.
[EKSTRA KREDİ]
EXISTS ifadesine gelince, Paul'un belirttiği gibi, kodunuzdaki bir sonraki adıma geçmeden önce kodu doğrulamak için birçok başka yol vardır.
- EXISTS deyimi, SQL Server'ın tüm sürümlerinde çalışan kodlar oluşturmanıza yardımcı olabilir
- Tek bir ifadede karmaşık denetimlere izin veren bir Boolean işlevidir