我的程序将创建一个临时表,该程序表将在程序执行后删除。数据类型长度为8.但是当我使用Sql Server中的触发器函数运行程序时,我想将长度更改为15。我有几张桌子需要改变长度。有没有办法改变长度而不在触发函数中声明表名?
澄清: 我有100个程序,它们将创建具有不同名称的临时表。每个临时表都有user_id varchar(8)。所以我想把长度改为15。但我不想打开我的每个程序的源代码来改变它。有没有更好的方法可以建议我?
答案 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注入。
编辑:这只是一个大概的想法,你应该知道你应该在哪些条件下改变列 - 如果你的表名有可预测的模式。