2016-05-24 1 views
0

読み取りカンマで文字列とSQLテーブルに単一行を挿入

Column A  Column B  Column C 
---------------------------------------------- 

私は(アップル、バナナ、オレンジ)のような入力文字列を有しています。これらの値を上記の表に挿入する必要があります。

結果は

ColumnA  Column B  Column C 
------------------------------------------- 
Apple  Banana   Orange 

CSV文字列として入力パラメータを取る手順を使用して、それは可能ですようにすべきですか?

+3

はい、可能ですが、**悪い**アイデアです。 –

+0

どのように?私の場合、これが唯一の方法です... –

+0

なぜ3つの異なるパラメータをストアドプロシージャに送信できませんか? –

答えて

-2

以下のクエリを使用してください。そのテーブルに

を入力文字列パラメータと挿入を分割し、次のSQLスクリプトを確認してくださいSQL Serverの2012

BEGIN 
     DECLARE @input VARCHAR(4000) 
     DECLARE @str VARCHAR(4000) 
     DECLARE @Query NVARCHAR(max) 
     SET @input ='(Apple,Banana,Orange)' 
     IF(@input is not null) 
     BEGIN 
       SET @str = (SELECT REPLACE(@input,'(','(''')) 
       SET @str = (SELECT REPLACE(@str,')',''')')) 
       SET @str = (SELECT REPLACE(@str,',',''',''')) 
      SET @Query ='INSERT INTO MyTable (ColumnA,ColumnB,ColumnC)VALUES '[email protected] 
      Exec (@Query) 

     END 
END 
+0

これはさらに疑問です。エラーが発生しやすいだけでなく、SQLインジェクション攻撃のためのオープン・ドアです。 –

+0

ありがとうございます。そのうまく動作します。 –

+0

@AbinAugustineは次の入力を考慮します: ''(Apple、Banana、Orange); DROP TABLE MyTable''。 –

0

に細かい作業は私がSQL split string function dbo.Splitを使用し、ソースコードを見つけることができることに注意してください2016

/* 
create table TableT (
[Column A] varchar(100), 
[Column B] varchar(100), 
[Column C] varchar(100) 
) 
*/ 
declare @string varchar(max) = 'Apple,Banana,Orange' 
select * from dbo.Split(@string, ',') 

insert into TableT 
select 
    MAX([Column A]) as [Column A], 
    MAX([Column B]) as [Column B], 
    MAX([Column C]) as [Column C] 
from (
select 
    case when id = 1 then val end as [Column A], 
    case when id = 2 then val end as [Column B], 
    case when id = 3 then val end as [Column C] 
from dbo.Split(@string, ',') 
) s 

select * from TableT 
1

使用してくださいSQL Serverを使用しない限り呼ばSQLチュートリアル

であなたは、このようなユーザ定義の分割機能が必要になります以下のコードは列名のリストを取得します。テーブルに挿入するために同じものをSPに渡すことができます。

BEGIN 
      DECLARE @str VARCHAR(2000) 
      DECLARE @input VARCHAR(4000) 
      DECLARE @ind Int 
      DECLARE @Count int 
      DECLARE @max int 
      SET @max =0 
      DECLARE @table TABLE(ColumnA varchar(10),ColumnB varchar(10),ColumnC varchar(10)) 
      DECLARE @Result TABLE (ID int identity(1,1),value varchar(1000)) 
      SET @input ='Apple,Banana,Orange' 
      IF(@input is not null) 
       BEGIN 
        SET @ind = CharIndex(',',@input) 
        WHILE @ind > 0 
         BEGIN 
           SET @str = SUBSTRING(@input,1,@ind-1) 
           SET @input = SUBSTRING(@input,@ind+1,LEN(@input)[email protected]) 
           INSERT INTO @Result values (@str) 
           SET @ind = CharIndex(',',@input) 
         END 
       SET @str = @input 
       INSERT INTO @Result values (@str) 
      END 

      SET @Count = (SELECT Max(ID) from @Result) 

      WHILE @Count > @max 
       BEGIN 
       SET @max = @max +1 
       DECLARE @Value varchar(1000) 
       SET @Value = (SELECT value from @Result WHERE ID [email protected]) 

       SELECT @value 
      END 
    END 
関連する問題