2014-07-21 77 views
0

當談到SQL Server Management Studio中的存儲過程時,我是一個新手。我有我被告知要進行以下更改到使用存儲過程的應用程序:在項目數量3個表格,2個數據庫,1個存儲過程

第1步:用戶類型。 第2步。客戶姓名,地址等顯示在同一表格的其他字段中。

有3個表格:批量訂單,小訂單和客戶信息。

批量訂單和小訂單在Database_1中,客戶信息在Database_2中。

小訂單的主鍵是訂單號。小訂單中的一列包含每個訂單的客戶編號。該客戶編號是客戶表中的主鍵。 批量訂單表類似。

我想包括有條件的聲明說:如果訂單號在小訂單表中找到,從與該訂單號碼coorelates客戶表中的數據顯示。我已經嘗試了這種多種方式,但不斷收到「多部分標識符....無法綁定」錯誤。

即:

SELECT DB1.db.Customer_Table.Customer_Column AS CustomerNumber; 
    IF(CustomerNumber NOT LIKE '%[a-z]%') 
    BEGIN 
     SELECT * FROM db.small_orders_table; 
    END 

    ELSE 
    BEGIN 
     SELECT * FROM db.buld_orders_table; 
    END 

請幫助。

+0

你有一個數據庫鏈接或服務器1和2之間的任何通信?執行左連接和isnull函數比嘗試使用條件表選擇更容易。 – Twelfth

+0

所以客戶沒有。作爲參數傳遞給您的存儲過程? – TMNT2014

+0

它們位於同一臺服務器上。我會嘗試一個isnull函數。 –

回答

3

聽起來就像是在同一臺服務器上2個數據庫......在這種情況下,你需要指定完全限定表名(database.schema.table)從存儲在其他數據庫上引用表時程序被找到。

Database_1.db.small_orders_tables 
+0

我會和我的isnull函數一起嘗試。 –

+0

爲了表達這個答案,你也可以使用鏈接服務器的功能(你需要先連接服務器),然後你可以使用[ServerName]。[Database] .dbo.Table – Hiram

0

首先,您不能使用別名作爲變量。如果你想爲一個變量賦值來測試它,你必須做一個SELECT語句,如SELECT @var = DB1.db.Customer_Table.Customer_Column FROM <YourTableFullName> WHERE <condition>。然後您可以使用@var(必須在之前聲明)進行測試。

關於以錯誤的方式使用完全合格的名稱您所遇到的錯誤,你就是。如果你在同一臺服務器上(不同的數據庫),你只需要在頂部指定數據庫名稱,然後指定對象的模式。假設有對數據庫1以下數據庫對象:

USE Database1; 
GO 

CREATE TABLE dbo.Table1 
(
     id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED 
    , val varchar(30) 
); 
GO 

INSERT INTO dbo.Table1 (val) VALUES ('test1'); 
GO 
INSERT INTO dbo.Table1 (val) VALUES ('test2'); 
GO 
INSERT INTO dbo.Table1 (val) VALUES ('test3'); 
GO 

以及隨後的上的Database2:

USE Database2; 
GO 

CREATE TABLE dbo.Table2 
(
     id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED 
    , val varchar(30) 
); 
GO 

現在,假設你想從第一個表中讀取與id = 2值,然後申請您的IF。讓我們聲明一個變量並對其進行測試:

USE Database1; 
GO 

DECLARE @var varchar(30); 

-- since you're on Database1, you don't need to specify full name 
SELECT @var = val FROM dbo.Table1 WHERE id = 2; 

IF @var = 'test2' 
BEGIN 
    SELECT id, val FROM dbo.Table1; 
END 
ELSE 
BEGIN 
    -- in this case the database name is needed 
    SELECT id, val FROM Database2.dbo.Table2; 
END 
GO 

它有幫助嗎?

+0

當然。感謝您的意見,我會嘗試一下。 –

相關問題