четверг, 22 мая 2025 г.

Chad, Sql Server, Created, Modified

SQL Server Delete

https://ask.chadgpt.ru/share/ca0f14c0-5b36-4f36-8762-0f4d76aff440

Переименовать столбец Modified в Created:

EXEC sp_rename 'YourTable.Modified', 'Created', 'COLUMN';

--------------------------------

Если столбца ещё нет:

ALTER TABLE YourTable

ADD Created DATETIME2 NOT NULL DEFAULT SYSDATETIME();

--------------------------------

Если он уже есть, но без дефолта:

ALTER TABLE YourTable

ADD CONSTRAINT DF_YourTable_Created DEFAULT SYSDATETIME() FOR Created;

---------------------------------

Для проверки реализуйте простой тест:

INSERT INTO YourTable (OtherField1, OtherField2)
VALUES ('value1', 'value2');

SELECT * FROM YourTable WHERE OtherField1 = 'value1';
---------------------------------
Пример вставки — теперь без указания дат:
INSERT INTO [dbo].[TestTable2] ([DataInt], [DataChar])
VALUES (101, N'Первая запись'), (202, N'Вторая запись');
--------------------------------
Процедура для count  и триггера update
CREATE PROCEDURE dbo.CreateStandardTable
    @TableName NVARCHAR(128),
    @IdType NVARCHAR(10) = N'int'
AS
BEGIN
    SET NOCOUNT ON;

    -- Проверьте существование таблицы
    IF EXISTS (
        SELECT * FROM sys.tables WHERE name = @TableName AND schema_id = SCHEMA_ID('dbo')
    )
    BEGIN
        RAISERROR(N'Таблица %s уже существует.', 16, 1, @TableName);
        RETURN;
    END

    -- Собираем динамический SQL для создания таблицы
    DECLARE @sql NVARCHAR(MAX);

    SET @sql = N'CREATE TABLE [dbo].[' + @TableName + N'] (
        [ID] ' + @IdType + N' IDENTITY(1,1) NOT NULL PRIMARY KEY,
        [Created] DATETIME2 NOT NULL CONSTRAINT DF_' + @TableName + N'_Created DEFAULT (SYSDATETIME()),
        [Modified] DATETIME2 NOT NULL CONSTRAINT DF_' + @TableName + N'_Modified DEFAULT (SYSDATETIME())
    );
    ';

    -- Выполняем создание таблицы
    EXEC sp_executesql @sql;

    -- Создаём триггер для автоматического обновления Modified
    DECLARE @trgSql NVARCHAR(MAX);

    SET @trgSql = N'
    CREATE TRIGGER [TRG_' + @TableName + N'_Modified] 
    ON [dbo].[' + @TableName + N']
    AFTER UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;
        UPDATE t
        SET Modified = SYSDATETIME()
        FROM [dbo].[' + @TableName + N'] t
        INNER JOIN inserted i ON t.ID = i.ID;
    END;
    ';

    EXEC sp_executesql @trgSql;
END

Комментариев нет:

Отправить комментарий