0

SQL Server 2005 を実行しています。table1 という名前のテーブルを作成し、渡されたコンマ区切り値のリストを使用して、そのリストの各要素を列名として使用するストアド プロシージャを作成したいと考えています。

したがって、基本的には sp_procedurename(col1,col2,col3) のようになります

列 col1、col2、および col3 で table1 を作成します (そして、それらがすべて varchar(max) である場合、それも素晴らしいでしょう。

4

1 に答える 1

1
CREATE PROCEDURE dbo.whatever -- do not use sp_ prefix!
  @tablename SYSNAME,
  @column_list VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'CREATE TABLE dbo.' + QUOTENAME(@tablename) + '
    (
      [' + REPLACE(@column_list, ',', '] VARCHAR(MAX),
      [')
      + '] VARCHAR(MAX)
    );';

  EXEC sp_executesql @sql;
END
GO

これは、既に存在する場合などのエラー処理を@tablename行わず、SQL インジェクションから保護するために何もしません。この列名のコンマ区切りリストがユーザーによって入力された場合は、細心の注意を払って続行してください。

ああ、ストアド プロシージャにプレフィックスを使用しない理由は次のとおりですsp_

于 2013-10-11T17:23:29.707 に答える