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