2017-07-06 6 views
0

すべての列がユーザー 'A'の行を形成し、ユーザー 'B'の行にそれらを定義せずにコピーすることができるSQL照会を実行できますか列名。同じデータを持つSQL行をレプリケートしますが、すべての列を定義していません

例では、これは高速または強力なデータには反しませんが、これらのタスクを重複して繰り返し実行するのではなく機能的にするのに役立ちます。ベースユーザとターゲットユーザのパラメータは、ストアドプロシージャのパラメータになります。

Declare @BaseUserId varchar(50), 
    @TargetUserId varchar(50), 
    @ColumnName varchar(100) 

Declare columnNameCursor Cursor For SELECT c.name 
     FROM sys.columns c 
     WHERE c.object_id = OBJECT_ID('dbo.EmployeeMenuAccess') 

--Opens the cursor now for loop reading 
Open columnNameCursor 



Fetch next From columnNameCursor into @ColumnName 


While @@Fetch_Status=0 Begin 
    update DocSS set @ColumnName = (select @ColumnName from DocSS where 
    Username = @BaseUserId) where Username = @TargetUserID 
    Fetch next From c into @ColumnName 
End 


Close columnNameCursor 
Deallocate columnNameCursor 

ありがとうございます。

+1

を試してみて、あなたが挿入または更新のためにそれが必要なのですか? –

+0

これは、私たちがたくさんのユーザーを複製するためですが、バッチスクリプトや手作業を簡単に作成するために十分なユーザーが統一された設定をしていないためです。また、すべてのビットスイッチの列が多い他のテーブルもあります。だから私はこれを簡単にする方法を見つけると、それらを比較しようとするときに1つのバイスイッチを欠落する傾向が少ないだけでなく、我々は他の多くのスクリプトと同様に呼び出すことができる関数にする。 – Casey

+0

を更新し、場合によっては挿入します。現時点で更新に集中する必要があるのは、アカウントの設定時にフィールドがデフォルトで入力された後に行われるためです。そのため、更新の99%が更新されます。 – Casey

答えて

1
CREATE TABLE Test 
    (id int, name char(10)) 
; 
INSERT INTO Test VALUES(1, 'first'); 
INSERT INTO Test VALUES(2, 'second'); 
BEGIN TRAN T1; 
SELECT * INTO Temp FROM Test WHERE id = 1; 
UPDATE Temp SET id = (SELECT MAX(id)+1 FROM Test); 
INSERT INTO Test SELECT * FROM Temp; 
DROP TABLE Temp; 
COMMIT TRAN T1; 
SELECT * FROM Test; 

this

+0

新しい鍵を使いたくないのに、既存の行にデータを複製するだけで、鍵を保持するとどうなりますか?または行を削除して挿入するのが一番ですか? – Casey

+0

私はあなたがそれをやっていると思っている方法を参照してください。私はこれが好き。完璧で正確に私が必要なもの。私が言及したように、私は完全なスタック開発者ですが、SQLですばらしいわけではありません。だから私はこの反応が好きで、ありがとう。 – Casey