如何為動態為SQL Server表添加字段呢?對SQL新手來說,這可能是一個難題,不過沒關系,下面就將為您介紹該方法,希望對您有所幫助。
本例演示在SQL Server表中,當用戶添加一條字段信息數據到一個SQL Server表中,通過觸發器相應在另一個表中自動增加一個對應的字段。
1 首先建立一個字段信息表Fields
- CREATE TABLE [dbo].[Fields] (
- [FieldID] [int] IDENTITY (1, 1) NOT NULL ,
- [Name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
- [DataType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
- ) ON [PRIMARY]
- GO
-
- ALTER TABLE [dbo].[Fields] ADD
- CONSTRAINT [PK_Fields] PRIMARY KEY CLUSTERED
- (
- [FieldID]
- ) ON [PRIMARY]
- GO
2 建立一個動態字段表Customeres, 當Fields每增加一條記錄,本表就相應增加一個字段。
- CREATE TABLE [dbo].[Customeres] (
- [ID] [int] IDENTITY (1, 1) NOT NULL
- ) ON [PRIMARY]
- GO
-
- ALTER TABLE [dbo].[Customeres] ADD
- CONSTRAINT [PK_Customeres] PRIMARY KEY CLUSTERED
- (
- [ID]
- ) ON [PRIMARY]
- GO
3 為SQL Server表Fields新增一個觸發器,當增加數據的時候,都會自動調用此觸發器。注意:字段的長度硬編碼,只是為了演示目的,應根據自己的需要來動態調整長度。
- CREATE TRIGGER trigger_addField ON Fields
- FOR INSERT
- AS
-
- DECLARE @FieldID int,
- @Name varchar(50),
- @DataType varchar(50),
- @SQL varchar(1000)
-
- SELECT @FieldIDFieldID = FieldID, @Name = [Name], @DataTypeDataType = DataType
- FROM Inserted
- if not exists (SELECT * FROM syscolumns
- where id=object_id('Customeres')
- AND name=@Name)
- BEGIN
- SET @SQL = 'ALTER table Customeres add ' + @Name + ' '
- + @DataType + '(64) NULL'
- EXEC (@SQL)
- END
- PRINT @Name + ',' + @DataType
4 演示,在查詢分析中執行
Insert into Fields ([name], DataType) values ('name', 'varchar')
該文章在 2011/5/4 23:10:27 編輯過