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。