更新外鍵要外鍵更新到一個名爲表用戶其中外鍵指項目表,集團表。 用戶屬於一個項目,在一個組內,該組被定義爲項目級別。的詳細的用戶信息也存儲到一個表中ToolUser我如何在單一個語句
在爲用戶創建表語句如下:
CREATE TABLE [dbo].[User](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDproject] [int] NOT NULL,
[IDtoolUser] [int] NOT NULL,
[IDgroup] [int] NOT NULL,
[datemodified] [datetime] NOT NULL DEFAULT (getdate())
IDproject是FK爲ID在項目表
IDtoolUser是FK for ID在ToolUser表
IDgroup是FK爲ID在組表
我想執行包括在改變所述用戶分配到的組的更新這需要解決項目ID,更新羣組ID之前的羣組ID 用戶表
我想出了一個解決方案,其中的組ID是cal culed與函數,[DBO]。[IDofGroup],並用於爲UPDATE語句如下
UPDATE [dbo].[User]
SET IDgroup = [dbo].[IDofGroup]('TESTPROJ','none')
FROM [dbo].[User] as u
INNER JOIN [dbo].[Group] g
ON g.[ID]= u.[IDgroup]
INNER JOIN [dbo].[Project] p
ON p.[ID]= u.[IDproject]
AND p.[name] ='TESTPROJ'
WHERE g.[name] = 'TESTGROUP'
GO
功能IDofGroup本身執行夫婦SELECT解決項目ID和組ID如下
ALTER FUNCTION [dbo].[IDofGroup]
(
-- Add the parameters for the function here
@ProjectName as varchar(max),
@GroupName as varchar(max)
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @ProjectID int, @ResultID int
SET @ResultID=0
-- get project ID for @ProjectName
SELECT @ProjectID= ID
FROM [dbo].[Project]
WHERE [name][email protected]
-- find id fro group which name is @GroupName and project ID @ProjectID
SELECT @ResultID= ID
FROM [dbo].[Group]
WHERE [IDproject][email protected]
AND [name][email protected]
-- Return the result of the function
RETURN @ResultID
END
餘米想知道是否有任何的方式與某種在一個UPDATE語句中JOIN W/O的需求UPDATE語句
在你當前的'Update'語句中,INNER JOIN'現在可以得到你什麼,而不使用函數?把它變成一個'Select'語句來得到你需要的結果。然後將其重新轉換爲'Update'語句。 –
這是真的,我可以拉出一些功能,並執行之前的幾個SELECT語句。該功能只是方便重複使用。將這些SELECT添加到UPDATE中是我遇到的困難,爲什麼我要問'如何?'似乎增加一個INNER JOIN使它變成 –