1

type のパラメーターを受け入れるストアド プロシージャがありますVARCHAR(MAX)。そのパラメーターには、次のようなコンマで区切られた文字列があります

@test = 'test123,test456,test789';

そのパラメーターに基づいて、複数の挿入ステートメントを生成したいと考えています。

この質問で定義されている分割関数を使用します: Split string by comma in SQL Server 2008

文字列をコンマで分割した後に挿入を生成する方法の例を教えてください。

論理ステップは次のようになります。

@test = 'test123,test456,test789';
split @test
use while or cursor ? (I don't know)
INSERT INTO X values ('test123')
INSERT INTO X values ('test456')
...
4

4 に答える 4

1

以下のように試してみてください...

ここでは、ユーザー定義関数は必要ありません....以下のコードを使用して結果を取得するだけです...

DECLARE @test NVARCHAR(MAX)
SET @test = 'test123,test456,test789'
SET @test = ',' + @test + ','
DECLARE @Part NVARCHAR(MAX)
DECLARE @INDEX    INT
SET @INDEX = CHARINDEX(',',@test)
DECLARE @EIND INT set @EIND = 0

WHILE(@INDEX != LEN(@test))
BEGIN
    SET  @EIND = ISNULL(((CHARINDEX(',', @test, @INDEX + 1)) - @INDEX - 1), 0)

    INSERT INTO X SELECT (SUBSTRING(@test, (@INDEX  + 1),  @EIND)) -- Insert Comes Here

    SELECT @INDEX = ISNULL(CHARINDEX(',', @test, @INDEX + 1), 0)
END
于 2013-02-15T08:34:20.587 に答える
0

その場で SQL ステートメントを動的に作成し、そのコマンドを実行できます。実際にループする必要はありません。このスクリプトは、1 つの INSERT ステートメントで複数の挿入を提供します

DECLARE @test nvarchar(100) = 'test123,test456,test789';  
DECLARE @dml nvarchar(max) = N''
SET @dml = 'INSERT [dbo].[test2] VALUES' + '(''' + REPLACE(@test, ',', '''),(''') + ''')'
EXEC sp_executesql @dml

また、動的管理機能sys.dm_fts_parserでオプションを使用できます

SELECT FULLTEXTSERVICEPROPERTY ('IsFulltextInstalled')

0 = フルテキストはインストールされていません。1 = フルテキストがインストールされています。NULL = 無効な入力またはエラー。

0 = フルテキストがインストールされていない場合は、この投稿が必要ですSQL Server 2008 にフルテキストをインストールする方法は?

DECLARE @test nvarchar(100) = 'test123,test456,test789';
INSERT [dbo].[test2]
SELECT display_term
FROM sys.dm_fts_parser('"' + @test + '"', 1033, NULL, 0)
于 2013-02-15T08:13:52.157 に答える