I have a table Members with existing data, I want to add a non-nullable bit column called 'IsOnlineUser', I want all my existing rows to be set to false. I have a set of scripts that run each time I deploy so I need a check to see if the table
The first SQL I tried was
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
But that gives me
Invalid column name 'IsOnlineUser'
. Assumedly this is because the UPDATE fails to find the created column so I thought if I put a 'GO' between the two statements it would help so I did the following:
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
However this says
Must declare the scalar variable "@ColumnExists".
Assumedly this is because of the GO stopping me access the scalar variable between the two.
It seems like a fairly common use case, so I assume I am just missing something, any help would be much appreciated