I need to set my column consent in the same file that I am creating it in. The problem is that I get an error saying that consent is an invalid column name meaning it isn't going to run unless the altered statement has run and added the column to the table first. Is there anything I could do to get my altered statement to run first adding the consent column to the table than running my updated statement? Again I need to run this in the same file together.
USE [Elearn2]
GO
IF NOT EXISTS(SELECT *FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'UserMetaData' AND COLUMN_NAME = 'Consent')
BEGIN
ALTER TABLE UserMetaData
ADD Consent BIT NULL DEFAULT 0,
[CreatedAt] [datetime2] NULL,
[CreatedBy] [uniqueidentifier] NULL,
[UpdatedAt] [datetime2] NULL,
[UpdatedBy] [uniqueidentifier] NULL;
END
UPDATE UserMetaData
SET Consent = 0
WHERE Consent IS NULL;
ALTER TABLE UserMetaData
ALTER COLUMN Consent BIT NOT NULL;
UPDATE UserMetaData
SET [CreatedBy] = ('00000000-0000-0000-0000-000000000000')
WHERE [CreatedBy] IS NULL;
ALTER TABLE UserMetaData
ALTER COLUMN [CreatedBy] [uniqueidentifier] NOT NULL;
UPDATE UserMetaData
SET [UpdatedBy] = ('00000000-0000-0000-0000-000000000000')
WHERE [UpdatedBy] IS NULL;
ALTER TABLE UserMetaData
ALTER COLUMN [UpdatedBy] [uniqueidentifier] NOT NULL;
UPDATE UserMetaData
SET [CreatedAt] = '1900-01-01 00:00:00.0000000'
WHERE [CreatedAt] IS NULL;
ALTER TABLE UserMetaData
ALTER COLUMN [CreatedAt] [datetime2] NOT NULL;
UPDATE UserMetaData
SET [UpdatedAt] = '1900-01-01 00:00:00.0000000'
WHERE [UpdatedAt] IS NULL;
ALTER TABLE UserMetaData
ALTER COLUMN [UpdatedAt] [datetime2] NOT NULL;
DECLARE @ModDate NVARCHAR(max)
SET @ModDate = '
CREATE TRIGGER ModDate
ON UserMetaData
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE X
SET [UpdatedAt] = GETDATE()
FROM UserMetaData X
JOIN inserted i ON X.[UserId] = i.[UserId]
END'
EXECUTE (@ModDate)