2011-02-08 52 views
0

hy! 我有2個表格,每個我有一個列日期,我需要使用所有2個表中的信息製作一個表格,我想從3個表格中獲得列日期,但是在同一列 我試過了下面的代碼,但沒有工作SQL問題:在同一列

CREATE FUNCTION dbo.GetContactInformation(@id int) 
RETURNS @retActivityInformation TABLE 
(
ClientID int NOT NULL, 
ActivityDate datetime NULL, 
Tipe nvarchar(50) NULL, 
Number nvarchar(50) NULL, 
Value int NULL, 
Statu nvarchar(50) NULL, 
PRIMARY KEY CLUSTERED (clientID ASC) 

) AS 
BEGIN 
    DECLARE 
     @ClientID int, 
     @ActivityDate datetime, 
     @Tip nvarchar(50), 
     @Number nvarchar(50), 
     @Value int, 
     @Statu nvarchar(50); 
     SELECT 
     @ClientID = ClientID, 
     @ActivityDate = ActivityDate, 
     @Number = Number, 
     @Value = Value, 
     @Statu = Statu 
    FROM Fa,Pay 
    WHERE ID = @id; 
    SET @ActivityDate = 
     CASE 
      WHEN EXISTS(SELECT Fa.DataEmitere FROM Fa AS e 
       WHERE e.ID = @id) 
       THEN 'Fa'   
      WHEN EXISTS(SELECT Pay.Data FROM Pay AS bec 
       WHERE bec.ID = @id) 
       THEN 'Pay'    
     END; 

    IF @id IS NOT NULL 
    BEGIN 
     INSERT @retActivityInformation 
     SELECT @clientID, @ActivityDate, @Number, @Value,@Statu; 
    END; 

    RETURN; 
END; 
+1

`sql`是一個通用標記,你的意思是`sql-server`嗎? – Fionnuala 2011-02-08 09:51:16

回答

0

只需在該字段前面添加數據庫名稱即可。我將假設你實際上的意思是ActivityDate。如果您想要使用此字段進行選擇/插入,您需要以FaPay作爲前綴,因此它將是Fa.ActivityDatePay.ActivityDate

如果這不是領域,那麼我們需要更多的信息。

0

通過指定如下表名稱使用列: -

CREATE FUNCTION dbo.GetContactInformation(@id int) 
RETURNS @retActivityInformation TABLE 
(
ClientID int NOT NULL, 
ActivityDate datetime NULL, 
Tipe nvarchar(50) NULL, 
Number nvarchar(50) NULL, 
Value int NULL, 
Statu nvarchar(50) NULL, 
PRIMARY KEY CLUSTERED (clientID ASC) 

) AS 
BEGIN 
    DECLARE 
     @ClientID int, 
     @ActivityDate datetime, 
     @Tip nvarchar(50), 
     @Number nvarchar(50), 
     @Value int, 
     @Statu nvarchar(50); 
     SELECT 
     @ClientID = ClientID, 
     @ActivityDate = Fa.ActivityDate, 
     @Number = Number, 
     @Value = Value, 
     @Statu = Statu 
    FROM Fa,Pay 
    WHERE ID = @id; 
    SET @ActivityDate = 
     CASE 
      WHEN EXISTS(SELECT Fa.DataEmitere FROM Fa AS e 
       WHERE e.ID = @id) 
       THEN 'Fa'   
      WHEN EXISTS(SELECT Pay.Data FROM Pay AS bec 
       WHERE bec.ID = @id) 
       THEN 'Pay'    
     END; 

    IF @id IS NOT NULL 
    BEGIN 
     INSERT @retActivityInformation 
     SELECT @clientID, @ActivityDate, @Number, @Value,@Statu; 
    END; 

    RETURN; 
END; 
0

看到這裏的中間部分:

CREATE FUNCTION dbo.GetContactInformation(@id int) 
RETURNS @retActivityInformation TABLE 
(
ClientID int NOT NULL, 
ActivityDate datetime NULL, 
Tipe nvarchar(50) NULL, 
Number nvarchar(50) NULL, 
Value int NULL, 
Statu nvarchar(50) NULL, 
PRIMARY KEY CLUSTERED (clientID ASC) 

) AS 
BEGIN 
    DECLARE 
     @ClientID int, 
     @ActivityDate datetime, 
     @Tip nvarchar(50), 
     @Number nvarchar(50), 
     @Value int, 
     @Statu nvarchar(50); 
     SELECT 
     @ClientID = ClientID, 
     @ActivityDate = ActivityDate, 
     @Number = Number, 
     @Value = Value, 
     @Statu = Statu 
    FROM Fa,Pay 
    WHERE ID = @id; 
    SET @ActivityDate = ISNULL(
     (SELECT top 1 Fa.DataEmitere FROM Fa AS e WHERE e.ID = @id), 
     (SELECT top 1 Pay.Data FROM Pay AS bec WHERE bec.ID = @id)) 

    IF @id IS NOT NULL 
    BEGIN 
     INSERT @retActivityInformation 
     SELECT @clientID, @ActivityDate, @Number, @Value,@Statu; 
    END; 

    RETURN; 
END; 

本質,而不是測試,看是否存在數據只是爲了讓字段名稱,直接獲取數據。