Q
如何動態生成列?
-1
A
回答
1
由於多種原因,動態更改模式並不是一個好主意。從你描述的內容來看,我認爲你最好使用這個視圖。視圖將爲您提供您正在尋找的動態功能,同時減少副作用。
1
我會再次重複聲明,這是一個壞主意,很多事情可以去錯了,我敢肯定有一個更好的解決方案,任何潛在的問題,你」重新嘗試解決。這就是說,反正回答這個問題的明確,這裏是如何做到這一點的例子:
USE tempdb;
GO
CREATE TABLE dbo.Table1(Description VARCHAR(32));
CREATE TABLE dbo.Table2(ID INT);
GO
CREATE TRIGGER dbo.CatchNewTable1Data
ON dbo.Table1
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += CHAR(13) + CHAR(10) +
'ALTER TABLE dbo.Table2 ADD '
+ QUOTENAME(d) + ' VARCHAR(255);' -- guessing on destination data type
FROM
(
SELECT DISTINCT d = LEFT([Description], 128) -- identifier <= 128
FROM inserted AS i
WHERE NOT EXISTS
(
SELECT 1 FROM sys.columns
WHERE name = LEFT(i.[Description], 128)
AND [object_id] = OBJECT_ID('dbo.Table2')
)
) AS x;
EXEC sp_executesql @sql;
END
GO
現在,讓我們嘗試一下!嘗試一個已經存在的列,一個多行插入,其中一列已經存在,一個多行插入與傻瓜等。我沒有發佈一個值> 255,我也沒有處理任何奇特的字符,將導致問題。爲什麼?因爲最終我不希望你使用這個解決方案,所以我想解決真正的問題。但對於谷歌我想表明,有一個解決方案的規定的問題。
-- does nothing:
INSERT dbo.Table1 SELECT 'ID';
-- only adds column 'foo':
INSERT dbo.Table1 SELECT 'ID'
UNION ALL SELECT 'foo';
-- adds both of these columns:
INSERT dbo.Table1 SELECT 'bar'
UNION ALL SELECT 'splan foob';
-- only adds one of these:
INSERT dbo.Table1 SELECT 'blat'
UNION ALL SELECT 'blat';
SELECT * FROM dbo.Table2;
結果:
ID foo bar splan foob blat
----------- ------------ ------------ ------------ ------------
不要忘了清理:
DROP TABLE dbo.Table1, dbo.Table2;
相關問題
- 1. 動態生成列
- 2. 如何動態生成動態項目?
- 3. 如何動態生成XML?
- 4. 如何動態生成SqlFunctions.DateDiff
- 5. 如何動態生成SQL
- 6. 如何動態生成selectFields
- 7. 如何動態生成ColorfulButtons?
- 8. 動態生成webservice - 如何?
- 9. 如何動態生成DataTable以及動態生成Columns和Row?
- 10. 動態生成列mvvm
- 11. 生成陣列的動態
- 12. jquery動態列表生成
- 13. 動態SQL列生成
- 14. 生成陣列值動態
- 15. 需要動態生成列
- 16. 如何在動作3中生成動態鏈接列表
- 17. 如何動態生成ToggleButtons,它必須放置在動態生成的Groupbox中
- 18. 如何循環的輸入框動態生成的列表,並生成JSON
- 19. 如何顯示應生成動態
- 20. Haml的:如何生成動態ID
- 21. 如何動態生成與收益
- 22. 如何動態生成按鈕
- 23. 如何生成動態數據JSON
- 24. 如何生成動態文本字段?
- 25. 如何隱藏動態生成的div
- 26. 如何動態生成實例名稱?
- 27. 如何動態生成輸入字段
- 28. 如何動態生成Kivy對象
- 29. 如何動態生成C類型?
- 30. 如何動態生成CoreData對象
請返工你的問題,因爲目前尚不清楚你實際上要怎樣做。它與ASP.NET有什麼關係? –
你是說添加到Table1的新數據應該被添加到Table2中,或者當一個新列被添加到Table1時,同一列應該被自動添加到Table2中? (一列是元數據,而不是數據,只是爲了幫助澄清。) –
讓我澄清:讓我們說我們有2個表格Table1和Table2。表1有一個說''描述'的列。現在用戶添加3行到它說A,B,C。現在我想我應該寫一個存儲過程,將採取這3個值並將這些值作爲列添加到table2,以便Table2具有A,B,C作爲列。這應該是動態完成的,以便當用戶向Table1的描述列添加任何數據時,數據在表2中以列表示。 – user1226569