2012-02-26 13 views
0

これはストアドプロシージャの入力パラメータです。列名と列の値を分割してtempテーブルを挿入し、次にメインテーブルの生産テーブルを移動する必要があります。 ColumnNameに値CSV値がSQL Serverストアドプロシージャに渡されました

例のような

一時テーブル

Create Proc sample (@name VARCHAR(MAX)) 

@NAME='column1=value1,column2=value2,column3=value3' 

Create Table #temp(columnname varchar(max),value varchar(max)) 

私の質問:私は

  • どの列の値を見つけるために、希望の形式で入力パラメータを分割することができますどのように

    何か助けていただければ幸いです。

  • +0

    どのデータベースサーバーを使用していますか? – Vikram

    +2

    あなたがXMLを持っていれば、はるかに簡単です。 – Michas

    +0

    すべての列に 'VARCHAR(MAX)'を入力しないでください。**本当に悪い**のアイデアです! –

    答えて

    3

    これまでに、Erland Sommarskogが書いたこの詳細な記事をお伝えしたいと思います。http://www.sommarskog.se/arrays-in-sql-2008.html

    分割機能のリソースは、http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648にあります。私はいくつかのトピックは、他の例でStackOverflowの上で既に存在していると信じて

    CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512)) 
    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 
    ) 
    

    は、ここに私の好きなスプリット機能です。

    関連する問題