2015-10-19 64 views
2

我的問題是以下幾點:克隆現有記錄並修改一個字段。週期

SQL表具有多個記錄,多個屬性。

讓選擇它:

select * from jaikudo 

回報:

(id, created, createdByWho,relatedToWho,worksWithWho) 

工作落實:

當我:select * from jaikudo where createdByWho = 1 返回1個記錄。

我有約5000個記錄的表與worksWith表。 ID是PK,不necessearely上升或下降,但隨機數

當我:select * from worksWithWho

回報(ID,創建,createdByWho)基礎上,

我需要記錄插入到jaikudo表以下

`select * from jaikudo where createdByWho = 1` 

返回1條記錄(ID,創建,createdByWho,relatedToWho,worksWithWho)

COP y詳細信息:(createdByWho,relatedToWho)創建將拉動getdate()信息並插入如下:

在jaikudo表中爲每個worksWithWho數據從以下查詢中複製的數據:select * from jaikudo where createdByWho = 1

完成後,我必須在jaikudo表中創建約5000條新記錄,但如果可能的話,一些錯誤檢測將會很好如果jaikudo表已經具有完全相同的關係,則跳過該記錄並繼續。

謝謝。

+1

你可以使用一個數字/ Tally表,就像這個[問題](http://stackoverflow.com/questions/1393951/what-is-the-best-way-to-create-and-populate-a -numbers-table) – ughai

+0

感謝ughai,但不幸的是它並沒有幫助解決這個問題:( – Yvanhoe

回答

0

根據您的更新問題, 可以JOINworksWithWho,做這樣的事情。

INSERT INTO jaikudo(id, created, createdByWho,relatedToWho,worksWithWho) 
SELECT 
    CHECKSUM(NEWID()) as id, 
    GETDATE() as created, 
    j1.createdbyWho, 
    j1.relatedToWho, 
    w.worksWithWho 
FROM worksWithWho w 
INNER JOIN jaikudo j1 
ON j1.createdByWho = 1 
LEFT JOIN jaikudo j 
ON j.worksWithWho = w.id 
WHERE j.id IS NULL 
  1. INNER JOIN jaikudo j1 ON j1.createdByWho = 1被添加到獲得詳細信息createdbyWhorelatedToWho
  2. LEFT JOIN jaikudo j ON j.worksWithWho = w.id WHERE j.id IS NULL被添加到只添加那些具有相同worksWithWho犯規的記錄已經存在

注意記錄:使用w.id或任何列存儲的引用在您的worksWithWho表中。

+0

很好,謝謝,但主要問題仍然是同樣的:我怎麼可以批量創建記錄到jaikudo表的基礎上?這隻會列出所需的,但不插入:( – Yvanhoe

+0

它的非常簡單,只需在'SELECT'之前添加'INSERT INTO jaikudo(id,created,createdByWho,relatedToWho,worksWithWho)'' – ughai

+0

好東西謝謝。我也太過於複雜化整個事情。 – Yvanhoe

0

你可以試試這個:

DECLARE @max_worksWithWho INT = 1 
    WHILE @max_worksWithWho <= 5000 
    BEGIN 
    INSERT INTO jaikudo 
    SELECT id, created, createdByWho, relatedToWho, @max_worksWithWho 
    FROM jaikudo 
    WHERE createdByWho = 1 
     AND worksWithWho NOT IN (SELECT worksWithWho FROM jaikudo WHERE createdByWho = 1) 
    SET @max_worksWithWho = @max_worksWithWho + 1 
    END 
+0

嗨NguyễnHảiTriều!對不起,很痛苦,我沒有提到過,那個worksWithWho數據是完整的隨機記錄。 1和5000.有可能有一個worksWithWho = 1252452的記錄。我的意思是描述它大約有5000條記錄......感謝您的快速反應。 – Yvanhoe