存储过程拒绝删除它创建的列
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 ;
这可能是问题的原因。
我创建了一个存储过程来刷新 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 ;
这可能是问题的原因。