Sql server 基于参数向表中动态添加列的T-Sql存储过程

Sql server 基于参数向表中动态添加列的T-Sql存储过程,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,可能重复: 有谁能告诉我,是否有一个存储过程可以有效地满足以下要求: 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_IDENTIF

可能重复:

有谁能告诉我,是否有一个存储过程可以有效地满足以下要求:

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

基本上,我可以传入一个表名和列名,它将使用正确的事务在该表上创建它。

对不起,这是不可能的。看。

对不起,这是不可能的。看


对不起,这是不可能的。请访问此网站

对不起,那不是真的

然而,它是笨拙的。如果每次执行表单客户端代码或简单地编写SQL语句,您几乎可以简单地执行内嵌SQL,因为您每次执行时都需要定义表名、列名、列数据类型和默认值,除非您硬编码其中的一些参数,即列数据类型将始终为VarChar255

玩这个游戏的变化,看看你是否找到了你想要的。但是,可能有更好的方法来实现您的目标:

DECLARE @sql NChar(4000);

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

EXECUTE sp_executesql @sql
GO

对不起,这是不可能的。请访问此网站

对不起,那不是真的

然而,它是笨拙的。如果每次执行表单客户端代码或简单地编写SQL语句,您几乎可以简单地执行内嵌SQL,因为您每次执行时都需要定义表名、列名、列数据类型和默认值,除非您硬编码其中的一些参数,即列数据类型将始终为VarChar255

玩这个游戏的变化,看看你是否找到了你想要的。但是,可能有更好的方法来实现您的目标:

DECLARE @sql NChar(4000);

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

EXECUTE sp_executesql @sql
GO

您需要动态SQL。您需要动态SQL。从技术上说,你是对的,我想不使用动态SQL,但现在我知道我做不到。从技术上说,你是对的,我想不使用动态SQL,但现在我知道我做不到。不可能按照OP的要求做,不使用动态SQL。不可能按照OP的要求做,不使用动态SQL。