我的程序將創建一個臨時表,在程序執行後它將會下降。數據類型長度是8.但是我想在使用Sql Server中的觸發器函數運行程序時將長度更改爲15。我有幾張桌子需要改變長度。有什麼辦法可以改變長度而不用在觸發函數中指定表名?使用觸發器修改列數據類型長度
說明: 我有100個程序將創建不同名稱的臨時表。每個臨時表都將具有user_id varchar(8)。所以我想把長度改爲15。但我不想打開我的每個程序的源代碼來改變它。有沒有更好的方法可以建議我?
我的程序將創建一個臨時表,在程序執行後它將會下降。數據類型長度是8.但是我想在使用Sql Server中的觸發器函數運行程序時將長度更改爲15。我有幾張桌子需要改變長度。有什麼辦法可以改變長度而不用在觸發函數中指定表名?使用觸發器修改列數據類型長度
說明: 我有100個程序將創建不同名稱的臨時表。每個臨時表都將具有user_id varchar(8)。所以我想把長度改爲15。但我不想打開我的每個程序的源代碼來改變它。有沒有更好的方法可以建議我?
你想要的東西基本上可以使用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注入。
編輯:這只是一個大概的想法,你應該找出應該在哪些條件下改變列 - 如果表名存在可預測的模式。
非常感謝...這是可行的解決方案。 – FullStack
我還有一個問題。如果我創建一個沒有'TEST'列的表,它會拋出錯誤。我該怎麼做才能擺脫這個錯誤? – FullStack
@FullStack https://stackoverflow.com/questions/133031/how-to-check-if-a-column-exists-in-sql-server-table – user6144226
您選擇了錯誤的作業工具。這不是觸發器的工作。 –
@Damien_The_Unbeliever你可以建議任何其他方式可以在SQL Server中完成?因爲我不想修改我的程序,因爲我有更多的程序需要更改。 – FullStack
任何你不能簡單地用一次腳本改變表格的理由? – user6144226