更改表 my_table 添加 @column INT

发布于 2024-08-28 18:08:49 字数 235 浏览 6 评论 0原文

如果我想使用变量作为新列的名称,这在 MS SQL 中可行吗?

不起作用的示例:

ALTER TABLE my_table ADD @column INT

这对我来说非常有用:

EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')

If i want to use a variable as name of the new column, is this posible in MS SQL?

Example that dont work:

ALTER TABLE my_table ADD @column INT

This worked great for me:

EXEC ('ALTER TABLE my_table ADD ' + @column + ' INT')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萌辣 2024-09-04 18:08:50

这可以使用动态 sql 构建 DDL 并使用 EXEC 命令来执行字符串。

Declare @SQL VarChar(1000)

SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'

Exec (@SQL)

请参阅这篇文章。

我还要补充一点,当您冒险进入动态 sql 领域时,您需要注意不要让自己暴露于 SQL注入攻击。始终清理传入的参数。

正如 Philip 提到的 - 在执行此操作之前请仔细考虑。事实上,它是可能的,但这并不意味着它是一件好事......

Erland Sommarskog 写了一篇关于使用动态 sql 的广泛文章 -

This is possible using dynamic sql to build your DDL and using the EXEC command to execute the string.

Declare @SQL VarChar(1000)

SELECT @SQL = 'ALTER TABLE my_table ADD ' + @column + ' INT'

Exec (@SQL)

See this article.

I will also add that the moment you venture to the land of dynamic sql, you need to take care to not expose yourself to SQL Injection attacks. Always clean up the parameters coming in.

As Philip mentions - think long and hard before doing this. The fact that it is possible does not make it a good thing...

Erland Sommarskog wrote an extensive article about using dynamic sql - The curse and blessings of dynamic SQL which I recommend reading fully.

彼岸花似海 2024-09-04 18:08:50

看一下 (执行 (Transact-SQL)

CREATE TABLE MyTable(
        ID INT
)
GO
SELECT * FROM MyTable
GO
DECLARE @column VARCHAR(100)
SET @column = 'MyNewCol'
EXEC('ALTER TABLE MyTable ADD ' + @column + ' INT')
GO
SELECT * FROM MyTable
GO
DROP TABLE MyTable

Have a look at (EXECUTE (Transact-SQL))

CREATE TABLE MyTable(
        ID INT
)
GO
SELECT * FROM MyTable
GO
DECLARE @column VARCHAR(100)
SET @column = 'MyNewCol'
EXEC('ALTER TABLE MyTable ADD ' + @column + ' INT')
GO
SELECT * FROM MyTable
GO
DROP TABLE MyTable
梦醒灬来后我 2024-09-04 18:08:50
alter procedure sp_check_table_column
(
    @field_name varchar(max),
    @data_type varchar(max),
    @mandatory varchar(max)
)
as
if not exists (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '<table_name>' and COLUMN_NAME = @field_name)
begin
 declare @sql varchar(max)
 set @sql = ('ALTER TABLE <table_name> ADD ' + @field_name + ' ' + @data_type + ' ' + @mandatory)
 exec (@sql) 
end
alter procedure sp_check_table_column
(
    @field_name varchar(max),
    @data_type varchar(max),
    @mandatory varchar(max)
)
as
if not exists (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '<table_name>' and COLUMN_NAME = @field_name)
begin
 declare @sql varchar(max)
 set @sql = ('ALTER TABLE <table_name> ADD ' + @field_name + ' ' + @data_type + ' ' + @mandatory)
 exec (@sql) 
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文