我想更容易从我的设置中向现有列插入新的默认值。为了更好地概述和减少错误,我想用一个带有冗余名称的三线制作一个oneliner。我在商店dprocedure的第一次尝试是:
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
成为混合型?
答案 0 :(得分:3)
你必须使用动态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
答案 1 :(得分:1)
试试这个......
BEGIN
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(@TableName) AND name = @FieldName)
exec('ALTER TABLE ' + @TableName + 'ADD ' + @FieldName + ' [int] CONSTRAINT CONCAT(''DF_'', ' + @TableName + ','' _'', ' + @FieldName + ') DEFAULT ' + @DefaultValue + ' NOT NULL')
GO
END