sql - 存储过程: Variable table names

标签 sql sql-server

我希望更轻松地将新的默认值插入到我的设置中的现有列中。为了更好地概览和减少错误,我想用具有冗余名称的三行代码制作一行代码。我对此的存储程序的第一次尝试是:

CREATE PROCEDURE InsertDefault
    -- Add the parameters for the stored procedure here
    @TableName VARCHAR(200),
    @FieldName VARCHAR(200),
    @DefaultValue VARCHAR(200)
AS
BEGIN
    IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(@TableName) AND name = @FieldName)
        ALTER TABLE @TableName ADD @FieldName [int] CONSTRAINT CONCAT('DF_', @TableName, '_', @FieldName) DEFAULT @DefaultValue NOT NULL
    GO
END
GO

但似乎 ALTER TABLE @TableName 不起作用,约束名称的串联也不起作用。

我在这里缺少什么?

然后,是否有可能使 @DefaultValue 成为混合类型?

最佳答案

您必须使用动态 sql(不要忘记在查询字符串中转义单引号(如果存在)):

declare @cmd nvarchar(4000)
select @cmd = 'ALTER TABLE ' + @TableName + ' ADD ' + @FieldName 
       + ' [int] CONSTRAINT ' + CONCAT('DF_', @TableName, '_', @FieldName) 
       + ' DEFAULT ' + @DefaultValue + ' NOT NULL'
exec sp_executesql @cmd

关于sql - 存储过程: Variable table names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451202/

相关文章:

mysql - 合并表而不是相交

sql - 解析错误以翻译/_sql/translate使用UPDATE

mysql - 开发人员应该学习哪些基本的 dba 技能?

SQL Server 2005 使用查找表更新查询

sql-server - 如果我有一个只有自动增量列的表,我该如何插入?

python - 将日期时间插入sql

mysql - 为 MySql 中 SELECT 子句的结果创建自动增量主键

php - Mysql 查询使用现在和上周之间的日期

c# - 并行执行查询会导致更多时间 [SQL Server]

sql-server - 尝试模拟 CASE 表达式时 SSIS 包中的 "Error at Data Flow Task"