使用trigger修改列数据类型的长度

时间:2017-08-11 07:10:22

标签: sql-server triggers

我的程序将创建一个临时表,该程序表将在程序执行后删除。数据类型长度为8.但是当我使用Sql Server中的触发器函数运行程序时,我想将长度更改为15。我有几张桌子需要改变长度。有没有办法改变长度而不在触发函数中声明表名?

澄清: 我有100个程序,它们将创建具有不同名称的临时表。每个临时表都有user_id varchar(8)。所以我想把长度改为15。但我不想打开我的每个程序的源代码来改变它。有没有更好的方法可以建议我?

1 个答案:

答案 0 :(得分:1)

你想要的东西基本上可以使用DDL触发器来实现。

CREATE TRIGGER [TRG_TABLES]
ON DATABASE 
AFTER 
    CREATE_TABLE
AS 
BEGIN
    SET NOCOUNT ON

    DECLARE @TABLE_NAME SYSNAME

    SELECT 
        @TABLE_NAME = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','SYSNAME')

    IF EXISTS(SELECT * FROM   INFORMATION_SCHEMA.COLUMNS
          WHERE  TABLE_NAME = @TABLE_NAME
                 AND COLUMN_NAME = 'TEST') 
    BEGIN

        DECLARE @SQL as NVARCHAR(MAX) ='ALTER TABLE ' + @TABLE_NAME + ' ALTER COLUMN TEST NVARCHAR(200) '

        Exec sp_ExecuteSql @SQL
   END
END
GO

ENABLE TRIGGER [TRG_TABLES] ON DATABASE

如果使用此方法,您应该 EXTRA 小心SQL注入。

编辑:这只是一个大概的想法,你应该知道你应该在哪些条件下改变列 - 如果你的表名有可预测的模式。