0

我有一條select語句,需要從客戶名稱中查找客戶ID。如果該名稱不存在ID,則需要在客戶表中創建新記錄。這必須作爲select語句的一部分來完成(與其運行的應用程序有關)。sql查找ID並在沒有找到結果的情況下插入

我在試圖查看一個UDF,它返回了現有的ID或新的ID,然後才意識到您無法修改函數中的表。

任何想法如何做到這一點?

編輯:

我想我需要澄清一些事情。 select語句可以並將在每個實現的基礎上進行更改。我正在尋找的是查找或創建客戶ID(該表和查找的需要不會更改)作爲較大選擇語句的一部分的通用方法。

正在使用SQL應用程序加載從一個配置文件中的SELECT語句,並'SELECT'硬編碼,所以沒有之前的選擇等添加一個exec的機會

它看起來像什麼,我需要的是像'select a.1 (exec dotheLookup(name)) as customerID, a.2 FROM table,但我不知道如何去做。

+0

您正在使用什麼數據庫? – 2013-03-18 11:27:27

+0

oops。 SQL express 2008 r2 – Jay 2013-03-18 11:29:11

+0

使用存儲過程函數。 – Hiten004 2013-03-18 11:37:46

回答

0

您執行SELECT語句之前,你可以執行存儲過程的運行,從名稱返回ID的功能:

exec CheckForCustomerByNameAndAddIDIfItDoesntExist(customerName) 
declare iCustomerID int 
select iCustomerID = GetCustomerIDFromName(customerName) 
select a.1, a.2, iCustomerID as customerID from table 

類似的東西

+0

不幸的是我不能在select語句之前運行任何東西。使用查詢的應用程序從配置文件加載它並按原樣執行它。它也有'選擇'硬編碼。失敗的設計是失敗的,但它是我所堅持的。 – Jay 2013-03-18 11:52:04

1

我建議你創建一個存儲過程這個。喜歡的東西

Create procedure customer 
--parameters 
AS 
Begin 
IF exists(Select lookup(customerName) as customerID from table) 
    BEGIN 
    --Your select goes here 
    END 
ELSE 
    BEGIN 
    --Insert into customer table and return scopeidentity 
    --Select goes here 
    END 

END 

更新答:

您可以使用select語句不執行數據處理。

+0

該聲明可能包括子查詢等,它只是必須以'SELECT' – Jay 2013-03-18 14:42:21

0

你可以修改數據庫服務器嗎?如果是這樣,請添加指向本地服務器的鏈接服務器。

EXEC master.dbo.sp_addlinkedserver @server = N'LinkedLocal', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'LocalServerName' 
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedLocal',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL 

然後,只需運行調用存儲過程,做你的工作的OPENQUERY:

select * from OPENQUERY("LinkedLocal", 'exec Database.Schema.StoredProcedure ''Param1'', ''Param2'') 
+0

其可能性開始,我將不得不檢查那個! – Jay 2013-03-21 09:43:47