sql查找ID并在没有找到结果时插入

Posted

技术标签:

【中文标题】sql查找ID并在没有找到结果时插入【英文标题】:sql lookup ID and insert if no result found 【发布时间】:2013-03-18 11:25:48 【问题描述】:

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

我尝试查看返回现有ID 或新ID 的UDF,然后才意识到您无法通过函数修改表。

知道如何做到这一点吗?

编辑:

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

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

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

【问题讨论】:

你用的是什么数据库? 哎呀。 SQL Express 2008 r2 使用存储过程代替函数。 你想在函数或存储过程中选择语句? 我想不出一种方法来对以 SELECT 关键字开头的单个查询执行数据操作。 【参考方案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 语句执行数据操作。

【讨论】:

语句可以包含子查询等,它必须以'SELECT'开头【参考方案2】:

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

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

类似的东西

【讨论】:

不幸的是我不能在选择语句之前运行任何东西。使用查询的应用程序从配置文件加载它并按原样执行它。它还具有“选择”硬编码。失败的设计是失败的,但它是我坚持的。【参考方案3】:

你能修改数据库服务器吗?如果是这样,请添加指向本地服务器的链接服务器。

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'')

【讨论】:

有可能,我得检查一下!

以上是关于sql查找ID并在没有找到结果时插入的主要内容,如果未能解决你的问题,请参考以下文章

如何查找在 SQL Server 表中插入或更新行的时间

Word VBA查找某种颜色的文本并在其前面插入一个空格

选择数据并在所选记录中查找重复值的 sql 查询

需要使用正则表达式找到2个字符串,并在它们之间插入多行文本并插入替换文本

编写 SQL 语句通过 join id 查找行,并将连接行中的值插入到父表中

SQL Server:查找缺失 ID 的有效方法