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 回答