テーブル値パラメーターを使用できます。したがって、次のようなタイプがある場合:
CREATE TYPE PhoneNumberType AS TABLE
( number VARCHAR(50));
GO
次に、手順は次のようになります。
CREATE PROCEDURE dbo. usp_InsertPhoneNumbers
@TVP PhoneNumberType READONLY
AS
INSERT INTO Phone(number,....)
SELECT
number,
....
FROM
@TVP
ここを参照
編集
これはテーブルのように機能するため、これを行うのは非常に簡単です。
DECLARE @TVP PhoneNumberType
INSERT INTO @TVP
VALUES
('0412589'),('0425896'),('04789652')
EXEC usp_InsertPhoneNumbers @TVP
または、1 つの文字列として持っている場合は、分割する必要があります。これはきちんとした分割関数です:
CREATE FUNCTION dbo.Split (@s varchar(512),@sep char(1))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
GO
そして、次のようにプロシージャを呼び出します。
DECLARE @TVP PhoneNumberType
DECLARE @textToSplit VARCHAR(512)='0412589, 0425896, 04789652'
INSERT INTO @TVP
SELECT
split.s
FROM
dbo.Split(@textToSplit,',') AS split
EXEC usp_InsertPhoneNumbers @TVP