簡體   English   中英

存儲過程拒絕刪除它創建的列

[英]Stored Procedure refuses to delete column that it creates

我創建了一個存儲過程,用於刷新表中的數據。 它首先重新加載整個表。 接下來,應用幾個過濾器。 (示例:“模型”列必須等於“ W”;所有具有模型“ B”的行都將被刪除。)這種情況發生在表加載后(而不是在加載表期間),因為我想記錄由於以下原因刪除了多少行每個單獨的過濾器。 應用過濾器后,某些列的每一行都包含相同的值(其他值在過濾過程中已刪除)。 這些列現在無用,因此我想刪除它們。

對於SQL Server,這似乎是有問題的。 當得到執行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';

SQL Server中的表中刪除任何列的語法是

ALTER TABLE TableName DROP COLUMN ColumnName ;  

這可能是有問題的。

您是否可以再檢查一次視圖中是否存在“模型”列。

因為我已經嘗試了相同的情況及其對我的工作..

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM