有没有一种方法可以在Alter Table语句中为新列添加变量值?

时间:2019-09-26 11:56:55

标签: sql sql-server

DECLARE @VName      VARCHAR(8)

SET @VNAme = (
                          SELECT TOP 1 xyz 
                          FROM table
                          WHERE abc = something
                    )

ALTER TABLE table_name 
ADD new_column VARCHAR (8)  NOT NULL DEFAULT @VName

2 个答案:

答案 0 :(得分:0)

先读this post about SQL Injection 然后 ,您可以自担风险使用Dynamic SQL,如下所示:

DECLARE @AlterSQL VARCHAR(MAX) = '
    ALTER TABLE table_name ADD new_column 
        VARCHAR(8) 
        NOT NULL 
        DEFAULT ''' + REPLACE(@VName, '''', '''''') + ''''

EXEC (@AlterSQL)

如果您希望表达式随时间变化,请阅读akhilesh的函数答案。

答案 1 :(得分:-1)

CREATE FUNCTION dbo.GetValue()
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @VName      VARCHAR(8)

SET @VNAme = (
                          SELECT TOP 1 xyz 
                          FROM table
                          WHERE abc = something
                    )
  RETURN @VName
END


ALTER TABLE table_name 
ADD new_column VARCHAR (8)  NOT NULL DEFAULT (dbo.GetValue())

为实现该目标...您已经创建了一个函数并调用它...........

相关问题