1

重複の可能性:
ALTER TABLE my_table ADD @column INT

効果的にこれであるストアドプロシージャを持つことが可能かどうか、誰でも教えてもらえますか:

USE [dbname]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [Schema].[CreateColumn]
    @Table varchar(255),
    @ColumnName varchar(255)
AS
BEGIN
    BEGIN TRANSACTION
        SET QUOTED_IDENTIFIER ON
        SET ARITHABORT ON
        SET NUMERIC_ROUNDABORT OFF
        SET CONCAT_NULL_YIELDS_NULL ON
        SET ANSI_NULLS ON
        SET ANSI_PADDING ON
        SET ANSI_WARNINGS ON
    COMMIT

    BEGIN TRANSACTION
        ALTER TABLE [Schema].@Table ADD @ColumnName varchar(255) NULL
        ALTER TABLE [Schema].@Table SET (LOCK_ESCALATION = TABLE)
    COMMIT
END
GO

基本的に、テーブル名と列名を渡すと、適切なトランザクションでそのテーブルに作成されます。

4

2 に答える 2

3

申し訳ありませんが、それは不可能です。このウェブサイトを参照してください。

申し訳ありませんが、そうではありません。

しかし、それは不器用です。テーブル名、列名、列のデータ型、およびデフォルト値を毎回定義する必要があるため、単純にインライン SQL を実行するか (フォーム クライアント コードの場合)、毎回単に SQL ステートメントを作成するだけで済みます。実行します (これらのパラメーターの一部をハードコーディングしない限り、つまり、列のデータ型は常に VarChar(255) になります)。

これのバリエーションを試して、探しているものが見つかるかどうかを確認してください。ただし、あなたがやろうとしていることを達成するためのより良い方法がおそらくあります:

DECLARE @sql NChar(4000);

SET @Sql = N'ALTER TABLE [Schema].' 
    + @TableName + ' ADD ' 
    + @ColumnName + ' ' 
    + @ColumnType + ' ' 
    + @InitialValue

EXECUTE sp_executesql @sql
GO
于 2012-12-19T01:45:18.810 に答える
1

申し訳ありませんが、それは不可能です。このウェブサイトを参照してください。

于 2012-12-19T01:12:43.667 に答える