如何从 SQL 服务器 table 收集信息并在 INSERT-Statement 中使用它

How to collect information from SQL Server table and use it in INSERT-Statement

我在 SQL 服务器中有这个 INSERT 语句:

INSERT INTO [UserClassSettings]
       ([RSRC]
       ,[Deleted]
       ,[DateNew]
       ,[DateChanged]
       ,[UserNew]
       ,[UserChanged]
       ,[ProgramID]
       ,[UserID]
       ,[ClassName]
       ,[WriteByOpen]
       ,[DefaultReadAccess]
       ,[DefaultWriteAccess]
       ,[Summary])
 VALUES
       (0
       ,0
       ,getdate()
       ,NULL
       ,(SELECT ProgramID FROM [User] where UserName='Andreas')
       ,NULL
       ,NEWID()
       ,(SELECT UserID FROM [User] where UserName='Andreas')
       ,'RootOrder_C'
       ,0
       ,0
       ,0
       ,0)
GO

现在我想将此 INSERT 声明不仅用于 Andreas,而且用于每个用户。用户在 table "User"。因此,我需要从 User table 中收集所有用户并将其用作变量。

所以它看起来像这样

,(SELECT ProgramID FROM [User] where UserName=@user)
,(SELECT UserID FROM [User] where UserName=@user)

如果可以的话 SQL。

可能是这样的:

DECLARE @user int
DECLARE @anzahl int = (select count(*) from user)
DECLARE @i int = 0
WHILE @i < @anzahl BEGIN
    SET @i = @i + 1
    print @i
    -- INSERT?
END

我的问题是:

这可以在 SQL 中完成吗?如果可以,我该怎么做?

在此先感谢您的帮助。

您可以像这样从 SELECT 查询中插入结果集

INSERT INTO [UserClassSettings]
       ([RSRC]
       ,[Deleted]
       ,[DateNew]
       ,[DateChanged]
       ,[UserNew]
       ,[UserChanged]
       ,[ProgramID]
       ,[UserID]
       ,[ClassName]
       ,[WriteByOpen]
       ,[DefaultReadAccess]
       ,[DefaultWriteAccess]
       ,[Summary])
SELECT
        0
       ,0
       ,getdate()
       ,NULL
       ,ProgramID
       ,NULL
       ,NEWID()
       ,UserID 
       ,'RootOrder_C'
       ,0
       ,0
       ,0
       ,0
FROM [User]

你试过这样的事情吗?

UPDATE UserClassSettings 
SET RSRC = 0, Deleted = 0, DateNew = GETDATE(), ......
WHERE UserID IN ( SELECT DISTINCT UserID FROM User )