1
私は新しいテーブルを作成するストアドプロシージャを作成したいと思いますが、テーブル名とカラム(カラムの数とデータ型)が動的であるという問題があります。動的列を持つストアドプロシージャでテーブルを作成する方法
ので、手順は、2つのパラメータ、おそらく取る必要があります: テーブル名や列のリスト(このリストでは、カラムとデータ型の名前です)
をこのような何かをする方法はありますか?
私は新しいテーブルを作成するストアドプロシージャを作成したいと思いますが、テーブル名とカラム(カラムの数とデータ型)が動的であるという問題があります。動的列を持つストアドプロシージャでテーブルを作成する方法
ので、手順は、2つのパラメータ、おそらく取る必要があります: テーブル名や列のリスト(このリストでは、カラムとデータ型の名前です)
をこのような何かをする方法はありますか?
このような動的SQLを作成できます。パラメータとして
で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
あなたが求めているソフトウェアと言語を明確にする必要があります。これはデータベースシステムに関するものですか?おそらくSQL? –
こんにちは、それはMicrosoft SQL Serverです。 – user1912372
テーブルまたは列を変更する場合は、ストアドプロシージャの生成に意味がありません。実行プランを再利用することはできないため、パフォーマンスではなく利点はありません。 SQL文字列を生成して実行する必要があるため、セキュリティではありません。抽象化や単純化ではなく、あなたが抽象化したいと思うすべてのものを公開することになります。実際には、SQL文字列がSQLインジェクションの対象になる可能性があるため、セキュリティの問題が導入されています –