2017-07-06 17 views
0

是否有可能做一个SQL查询,我可以让我们假设所有列形成用户'A'的行并将它们复制到用户'B'的行中,而无需定义列名称。使用相同的数据复制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

我问这个问题的原因是因为我们复制了很多用户,但没有足够的用户为我们创建一个批处理脚本或过程来设置统一的设置,以便轻松处理。还有其他的表格,我们这样做是因为它有许多列的所有位开关。所以我找到了一种方法来使这更容易,并且在试图比较它们时不太容易丢失一个双开关,但是也可以使它成为我们可以像调用其他许多脚本一样调用的函数。 – 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

相关问题