-2

これは私がやりたいことの線に沿っています:

UPDATE [table1]
SET FirstName IN (SELECT [FirstName] FROM [table2]) 

[table1]で更新する必要のある名前は300あり、名前は[table2]にあります。名前はNULLSです。[table2]の名前である必要があります。

レコードセットはランダムにすることができます。したがって、テーブル間に関係は必要ありません。

どうすればこれを行うことができますか?

4

3 に答える 3

3

欠落している関係、順序付けの問題、またはデータが不正確になる可能性のあるものを無視して、これを試すことができます。これにより、2つのテーブルの各レコードに行番号が任意に割り当てられ、2つのテーブルがその番号と一致します。次に、その一致に基づいて[名前]フィールドを更新します。

WITH Source AS 
(
    SELECT 
        Name, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNum
    FROM 
        [Table2]
), 
Destination AS 
(
    SELECT 
        Name, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNum
    FROM 
        [Table1] 
)
UPDATE 
    d
SET 
    d.Name = s.Name
FROM 
    Source s
JOIN 
    Destination d 
    ON 
    s.RowNum = d.RowNum

ただし、あるテーブルを別のテーブルに関連付ける具体的なものがないと、ソーステーブルの300の名前が、宛先テーブルの300行のランダム化されたセットにコピーされる可能性があります。


編集:ROW_NUMBER()列を次のように変更した場合、ランダム化されたデータが必要であるというコメントに基づきます。

ROW_NUMBER() OVER (ORDER BY (SELECT NEWID()))

あなたは本当にいくつかのランダム化されたデータを取得します。

于 2012-09-11T20:25:46.553 に答える
2

[table1]に入力する必要のある名前は300あり、名前は[table2]にあります。

Populateは挿入を意味し、これは機能します。

INSERT INTO table1
    SELECT FirstName FROM table2;

次に例を示します:http ://sqlfiddle.com/#!3 / 0d2f4 / 1/0

于 2012-09-11T20:18:50.833 に答える
1

表1に新しいレコードを作成しようとしているだけの場合は、次のようにします。

insert into Table1 (FirstName)
select FirstName from Table2

レコードを更新する必要がある場合は、次のようにします。

update t1
   set FirstName = t2.FirstName,
       LastName  = t2.LastName
  from Table1 t1
  join Table2 t2 on t1.ID = t2.ID   -- (or whatever key you are using to join the two tables)
于 2012-09-11T20:17:57.370 に答える