【问题标题】:SQL Server : drop column @variable not workingSQL Server:删除列@variable 不起作用
【发布时间】:2015-01-15 08:06:59
【问题描述】:

我正在使用 Microsoft SQL Server,但似乎无法解决这个问题。

我有一张表格,上面有一些动态和静态列。

静态列将是产品名称、产品类型,而动态数据将是来自当前月份的一些生产数据。

在每个月初,我必须从过去一个月的动态列中删除并在表的末尾添加一个新月份

我的解决方案是将列名保存到局部变量中,然后将其添加到 alter 语句中。但这不起作用,它一直给我一个错误,如下所示:

消息 102,第 15 级,状态 1,第 18 行
'@month_b' 附近的语法不正确

我现在将添加查询

declare @month_t char(15) 
declare @month_b char(15) 
declare @sql char(30)

set @month_b = (SELECT  top 1 name 
                FROM sys.columns 
                WHERE object_id = OBJECT_ID('dbo.ct_test') 
                  AND name != 'TTNR' AND name != 'Family' AND name like '%B%'
                ORDER BY name ASC)

set @month_t = (SELECT top 1 name 
                FROM sys.columns 
                WHERE object_id = OBJECT_ID('dbo.ct_test') 
                  AND name != 'TTNR' AND name != 'Family' AND name like '%T%'
                ORDER BY name ASC)

alter table ct_test 
   drop column @month_b

我找不到解决办法,你能帮帮我吗?

提前谢谢你

【问题讨论】:

  • 这似乎不是一个好的设计,顺便说一句。定期添加和删除列对我来说是一种代码味道。

标签: sql sql-server local-variables


【解决方案1】:

你需要使用Dynamic Query

Declare @sql nvarchar(max)

set @sql = 'alter table ct_test drop column '+ @month_b

Exec sp_executesql @sql

set @sql = 'alter table ct_test drop column '+ @month_t

Exec sp_executesql @sql

【讨论】:

  • 它给了我另一个错误:消息 214,级别 16,状态 2,过程 sp_execute,第 1 行过程需要类型为“int”的参数“@handle”。
  • @CaluserIstvan - 抱歉,它应该是 sp_executesql 而不是 sp_execute。立即更新检查
  • @CaluserIstvan - 很高兴它帮助了你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多