2016-03-31 20 views
1

bir değerin birden çok değeri eklemek için:MSSQL prosedürü yerine bu MSSQL prosedür var

CREATE PROCEDURE InsertCodeIfNotExist 
    @Code nvarchar(32) 
AS 
    INSERT Codes (Code) 
    SELECT @Code 
    WHERE NOT EXISTS 
      (SELECT 1 
      FROM Codes 
      WHERE Code = @Code 
     ); 

benim için iyi çalışıyor, ama böyle bir 100 değerleri ve çağrı ile çalışmak olabilir eğer daha iyi olurdu her bir değer için bu prosedür. Bu mssql ile mümkün mü? InsertManyCodesIfNotExist gibi tanımlayabilir miyim ve yüzlerce değerden fazlası var mı?

+0

bu '@Code sağlıyoruz yerden '? Ayrıca, '@ Code' değerinin tablonuzda benzersiz olduğundan emin olmak istediğiniz gibi görünüyor, o zaman neden bir 'UNIQUE' sütunu olarak yapmıyorsunuz? –

+0

@RahulTripathi Bu https://github.com/patriksimek/node-mssql#input – Capaj

+0

@RahulTripathi gibi giriş paraşütlerini tanımlayan node.js mssql paketini kullanıyorum. Bu konuda tanımladığım bir kısıtlama var. : ALTER TABLE Kodları ADD CONSTRAINT kodu BENZERSİZ (Kod) – Capaj

cevap

3

Evet, bunu kolayca birkaç farklı şekilde yapabilirsiniz. Senin durumunda

CREATE TYPE [dbo].[ModuleList] AS TABLE(
    [SubId] [varchar](12) NOT NULL, 
    PRIMARY KEY CLUSTERED 
(
    [SubId] ASC 
)WITH (IGNORE_DUP_KEY = OFF) 
) 

, alt kimlik için yerine 'Kod': Böyle durumlarla başa bir yolu böyle aşağıda kullanmak biri olarak, bir kullanıcı tanımlı veri türü yaratmaktır. Sonra bu tür T-SQL'de oluşturabilir, kodlarla doldurup saklı prod'unuza bir parametre olarak iletebilirsiniz.

Depolanmış yordam aşağıdaki gibi bu parametreyi almaya kurulacaktı:

CREATE PROCEDURE [dbo].[SomeStoredProc] 
    @ModuleList ModuleList READONLY 
AS 
... 

gibi o zaman sadece bir tablo gibi @ModuleList davranabilirsiniz. Senin durumunda, bir kod tablosu.

+0

Eğer cevap [Tablo Değerli Parametre] (https://msdn.microsoft.com/en-AU/library/bb510489) denir açıklığa kavuşturduysanız zarar vermez .aspx). –

0

Evet, bir tablo değerli parametre tanımlayabilir ve saklı yordam bir tablo geçirebilirsiniz:

/* Create a table type. */ 
CREATE TYPE CodeTableType AS TABLE (Code VARCHAR(32)); 
GO 

/* Create a procedure to receive data for the table-valued parameter. */ 
CREATE PROCEDURE dbo.InsertCodeIfNotExist 
@TVP CodeTableType READONLY 
AS 
SET NOCOUNT ON 
INSERT INTO Codes (Code) 
SELECT 
    Code 
FROM 
    @TVP; 

Detaylar burada bulabilirsiniz: https://msdn.microsoft.com/en-us/library/bb510489(v=sql.120).aspx

İlgili konular