2016-11-02 11 views
1

私は新しいテーブルを作成するストアドプロシージャを作成したいと思いますが、テーブル名とカラム(カラムの数とデータ型)が動的であるという問題があります。動的列を持つストアドプロシージャでテーブルを作成する方法

ので、手順は、2つのパラメータ、おそらく取る必要があります: テーブル名や列のリスト(このリストでは、カラムとデータ型の名前です)

をこのような何かをする方法はありますか?

+0

あなたが求めているソフトウェアと言語を明確にする必要があります。これはデータベースシステムに関するものですか?おそらくSQL? –

+0

こんにちは、それはMicrosoft SQL Serverです。 – user1912372

+0

テーブルまたは列を変更する場合は、ストアドプロシージャの生成に意味がありません。実行プランを再利用することはできないため、パフォーマンスではなく利点はありません。 SQL文字列を生成して実行する必要があるため、セキュリティではありません。抽象化や単純化ではなく、あなたが抽象化したいと思うすべてのものを公開することになります。実際には、SQL文字列がSQLインジェクションの対象になる可能性があるため、セキュリティの問題が導入されています –

答えて

1

このような動的SQLを作成できます。パラメータとして

  • 送信テーブル名は、ユーザー定義されたテーブルを作成する必要があるのDataTable、
  • リストを送信するためのcolunName、SPへのデータ型(ユーザー定義表)

でDataTableを送るSPに

CREATE TYPE [dbo].[myColumnDatatyes] AS TABLE(
    columnName [NVARCHAR](200) NULL, 
    columnDataType [NVARCHAR](200) NULL 
); 

次に、このUDTを使用して、このようなUDTを使用して、カーソルをテーブルにループして動的SQL文を作成します。

Create Procedure sp_CreateDynamicTables(
@tableName nvarchar(150), 
@tableSchema [myColumnDatatyes] readonly 
) 
AS BEGIN 
DECLARE @sql NVARCHAR(MAX); 

set @SQL= N' Create table '+QUOTENAME(@tableName); 

set @SQL [email protected]+ ' Here loop over @tableSchema to add N Columns ' 

EXECUTE sp_executesql @sql 
END 
関連する問題