存储过程拒绝删除它创建的列

Stored Procedure refuses to delete column that it creates

我创建了一个存储过程来刷新 table 中的数据。它首先重新加载整个 table。接下来,应用几个过滤器。 (示例:列 'Model' 必须等于 'W';模型为 'B' 的所有行都被删除。)这发生在 table 加载之后(而不是加载期间),因为我想要记录由于每个单独的过滤器而删除了多少行。应用过滤器后,某些列在每一行中都包含相同的值(其他值在过滤过程中被删除)。这些列现在没用了,所以我想删除它们。

这似乎是 SQL 服务器的问题。当给出执行 SP 的命令时,它表示它应该在其最后一步中删除的列当前不存在并拒绝 运行。这在技术上是正确的,这些列目前不存在,但它们将由 SP 自己创建。

一些模型代码:

CREATE PROCEDURE dbo.Procedure AS (
  DROP TABLE dbo.Table
  SELECT * INTO dbo.Table FROM dbo.View
  INSERT INTO dbo.Log VALUES (GETDATE(),(SELECT COUNT(1) FROM dbo.Table))
  DELETE FROM dbo.Table WHERE Model <> 'W'
  INSERT INTO dbo.Log VALUES (GETDATE(),(SELECT COUNT(1) FROM dbo.Table))
  ALTER TABLE dbo.Table DROP COLUMN Model
)

执行时的错误代码:

[2016-09-02 12:25:20] [S0001][207] Invalid column name 'Model'.

如何绕过这个问题并让 SP 达到 运行?

如果我没理解错的话,可以使用动态SQL:

exec sp_executesql 'ALTER TABLE dbo.Table DROP COLUMN Model';

你能再检查一次视图中是否存在列 'Model'。

因为我已经尝试过相同的场景并且它对我有用..

SQL 服务器 中的 table 删除任何列的语法是

ALTER TABLE TableName DROP COLUMN ColumnName ;  

这可能是问题的原因。