Ben (değil bir KİMLİK türü olsa da, sadece düz ol' int) o birkaç farklı tablolar arasında aslında benzersiz sütunlardan biri benzersiz bir tanımlayıcı yer (şu anda binlerce numaralandırma INSERT deyimleri ile) veri ekler SQL komut dosyası var .SQL Server UDF çağrıları arasında durumu koruyabilir miyim?
sonraki müsait kimliğini alır senaryoma (yani son kullanılan kimlik + 1) için bir skaler işlev eklemek istiyorum ama bir yol olarak görünmüyor çünkü bu mümkün olduğundan emin değilim Bir UDF içinden global veya statik değişken kullanın, geçici tablo kullanamıyorum ve kalıcı bir tabloyu işlev içinden güncelleyemiyorum.
declare @v_baseID int exec dbo.getNextID @v_baseID out --sproc to get the next available id --Lots of these - where n is a hardcoded value insert into tableOfStuff (someStuff, uniqueID) values ('stuff', @v_baseID + n) exec dbo.UpdateNextID @v_baseID + lastUsedn --sproc to update the last used id
Ama böyle bakmak istiyorum:
Şu benim script şöyle bir baş belası olduğunu ofset ve bir hata eğilimli hardcoding
--Lots of these insert into tableOfStuff (someStuff, uniqueID) values ('stuff', getNextID())
. Basit bir skaler fonksiyona dönüştürmek çok cazip, ancak bu şekilde yapılamayacağını düşünmeye başladım çünkü aramalar arasındaki ofset sayacını korumanın bir yolu yok gibi görünüyor. Bu doğru mu, yoksa kayıp olduğum bir şey var mı?
Şu anda SQL Server 2005 kullanıyoruz. açıklama için
düzenlemeler: bu olmayacak isabet
İki kullanıcı. Bu sadece bir kez çalıştırılacak bir yükseltme komut dosyası ve aynı zamanda asla.
gerçek sproc
, sp_who ile başlayan örnek kod sabit değildir.Normal kullanımda kimlikleri gerektiği gibi almak için bir kimlik tablosu ve bir spkayı kullanıyoruz, bu betikte bunu yapmanın daha temiz bir yolunu arıyordum, bu da aslında bir sürü veriyi db'ye döküyor.