我有一個表與現有數據的成員,我想添加一個名爲'IsOnlineUser'的非空值位列,我希望所有現有行都設置爲false。我有一組每個I部署時運行的腳本,所以我需要一個檢查,看看錶如何編寫更新以添加具有現有值的列
我嘗試的第一個SQL是
SET @ColumnExists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Member' AND COLUMN_NAME = 'IsOnlineUser');
IF (@ColumnExists = 0)
BEGIN
ALTER TABLE Member ADD IsOnlineUser bit NULL;
UPDATE Member SET IsOnlineUser= 0;
ALTER TABLE Member ALTER COLUMN IsOnlineUser bit NOT NULL;
END
GO
但是,這給了我
無效列名'IsOnlineUser'
。 Assumedly這是因爲更新未能找到創建的列,所以我想如果我把一個「GO」這兩種說法之間,這將有助於所以我做了以下內容:
SET @ColumnExists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Member' AND COLUMN_NAME = 'IsOnlineUser');
IF (@ColumnExists = 0)
BEGIN
ALTER TABLE Member ADD IsOnlineUser bit NULL;
END
GO
IF (@ColumnExists = 0)
BEGIN
UPDATE Member SET IsOnlineUser= 0;
ALTER TABLE Member ALTER COLUMN IsOnlineUser bit NOT NULL;
END
GO
然而,這說
必須聲明標量變量「@ColumnExists」。
假設這是因爲GO阻止我訪問兩者之間的標量變量。
這似乎是一個很常見的情況,所以我想我只是失去了一些東西,任何幫助將不勝感激
你不需要設置@ columnExists =(...)在去之後再次? https://stackoverflow.com/questions/937336/is-there-a-way-to-persist-a-variable-across-a-go因爲變量不會一直持續下去嗎? – xQbert
DECLARE @ColumnExists INT –