0

ID我有一个 select 语句,需要从客户名称中查找客户。如果ID该名称不存在,则需要在客户表中创建一条新记录。这必须作为 select 语句的一部分来完成(与运行它的应用程序相关)。

在意识到您无法从函数修改表之前,我尝试查看返回现有ID或新的 UDF。ID

知道如何做到这一点吗?

编辑:

我想我需要进一步澄清一些事情。select 语句可以并且将在每个实现的基础上发生变化。我正在寻找的是一种通用的方式来查找或创建客户 ID(该表和进行查找的需要不会改变)作为更大的选择语句的一部分。

使用 sql 的应用程序从配置文件加载 select 语句,并且已'SELECT'硬编码,因此没有机会在 select 等之前添加 exec。

看起来我需要的是类似的东西'select a.1 (exec dotheLookup(name)) as customerID, a.2 FROM table,但我不知道该怎么做。

4

3 回答 3

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 语句执行数据操作。

于 2013-03-18T11:54:23.537 回答
0

您可以在执行 SELECT 语句之前执行存储过程,运行从名称返回 ID 的函数:

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

类似的东西

于 2013-03-18T11:50:17.023 回答
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'')
于 2013-03-19T22:03:02.167 回答