Birden çok değişken SQL Server ayarı

Bir dizi parametreyi alıp 7 farklı tabloya veri ekleyen 7 farklı saklı yVeyadamım var.

Şimdi bu 7 prosedürü ihtiyaç duydukları tüm verilerle yürütmek için saklı bir prosedür oluşturuyVeyaum. İhtiyaç duydukları tüm veriler ONE tablosu (CommonImpVeyat).

Bu ana saklı yVeyadamda ihtiyacım olan tüm parametreleri almalı mıyım?

Veya

Sadece bu 7 ayrı tabloya eklenmesi gereken satırın kimliğini alın ve verileri doğrudan tablodan alın.

I think the second option is best. BUT, how do I set all the variables in the main stVeyaed procedure to all of the data from the (CommonImpVeyat) table?

Essentially, how do I set a bunch of declared variables to the values from a specific row in the CommonImpVeyat table?

Teşekkürler

2

2 cevap

Kimliği geçme:

Buradaki fayda, saklı yordamlarınıza tüm arabirimleri basitleştirmenizdir.

Bu, kodlamayı kolaylaştırır. SP'yi çeşitli yerlerden çağırırsanız, sadece birkaç parametre yüklemek ve aktarmak yerine tek bir parametre kullanmanız gerekir.


n Değişkenleri Geçiş:

Öyleyse buradan faydalanabilirsiniz, saklanan Prosedürleri, tutucu masadan 'ayırabilirsiniz'.

Bu, tablodaki herhangi bir veri olmadan doğrudan saklanan prosedürleri doğrudan çağırmanız anlamına gelir. Bu, verilerin yeni bir şekilde gelmesi veya ünite testi vb. İçin gelecekte faydalı olabilir.


Hangisi en iyisi:

Bunun doğru bir yanıtı olduğunu düşünmüyorum, daha çok tercih ve görüş konusu.

Benim düşüncem daha az sıkışık olan şeylerin daha iyi olduğu. Değişiklikler karşısında daha esnek.

Yapmamın yolu şu şekildedir ...

CREATE PROCEDURE main_by_variable @v1 INT, @v2 INT, ...
BEGIN
  EXEC sub_part_1 @v1, @v3
  EXEC sub_part_2 @v2
  EXEC sub_part_3 @v2, @v3
  ...
END

CREATE PROCEDURE main_by_id @id INT AS
BEGIN
  DECLARE
    @v1 INT,
    @v2 INT,
    ...
  SELECT
    @v1 = field1,
    @v2 = field2
  FROM
    holding_table
  WHERE
    id = @id

  EXEC main_by_variable @v1, @v2, ...
END
GO;

main_by_variable prosedürüne sahip olarak, tüm alt prosedürleri test etme gibi, tutma tablosuna herhangi bir veri girmek zorunda kalmadan, yanıltıcı olursunuz. Ve bu esneklik de alt prosedürlerin bir parçasıdır.

Ancak, kolaylık sağlamak için main_by_id kullanarak daha düzenli olduğunu görebilirsiniz. Bu sadece main_by_variable etrafında bir sarmalayıcı olduğundan, yaptığınız tek şey işlemdeki tek bir adımı kapsüllemek (tablodan veri almak).

Ayrıca veri toplama bölümü etrafında bir işlem yapmanıza ve verileri tablodan silmenize de olanak tanır. Veya diğer birçok seçenek. Esnek ve esnek olmayı severim.

2
katma

Tüm değişkenleri parametre olarak kabul etmenizi ve bunlar için varsayılan değerleri tanımlamanızı öneririm, böylece SP kullanıcıları tek bir ID parametresiyle veya bunları doğrudan belirterek bir diğeriyle birlikte kullanabilirler.

CREATE PROCEDURE MainSP
  @ID int,
  @CustomParameter  varchar(10) = NULL,
  @CustomParameter1 DateTime = NULL,
  ...

Bu şekilde SP oldukça esnektir

2
katma
CommonImport tablosu yalnızca bir tutucu tablodur. SP'ye giden tek değişken değerler, CommonImport tablosundan değerlerdir.
katma yazar ediblecode, kaynak
Bir CSV dosyasından içe aktarım alıyorum, her satır kontrol edilecek ve onaylanacak ve daha sonra CommonImport tablosuna konulacaktır. Bu veriler daha sonra, canlı sistemimize ve özellikle yedi farklı tabloya, yani mülk, mevduat, ev sahibi, kiracıya vb. İthal edilir. Bu nedenle, CommonImport tablosundan ilgili bilgileri alan ve ardından ilgili tabloya canlı olarak yerleştirilen yedi prosedür vardır. . Ayrıca, bu SP'nin veri kaynağı olmayan CommonImport'un kullanıldığı diğer projelerde kullanılabileceği için, parametrelerinizle en iyi sonucu verdiğinize karar verdiniz. Çok teşekkür ederim
katma yazar ediblecode, kaynak
BTW, neden tek bir masa ile çalışmak için 7 ayrı prosedür gerekiyor? Ne yapıyorlar?
katma yazar sll, kaynak