Sql 在函数调用存储过程中找不到用户定义的函数
我是SQL新手,所以我可能犯了一个非常简单的错误,希望有人能指出它是什么 我有以下生成新主键的现有存储过程(我知道有一种自动方法,但我们希望自己处理生成): 我现在正尝试使用以下方法对此进行测试:Sql 在函数调用存储过程中找不到用户定义的函数,sql,ssms,sql-function,Sql,Ssms,Sql Function,我是SQL新手,所以我可能犯了一个非常简单的错误,希望有人能指出它是什么 我有以下生成新主键的现有存储过程(我知道有一种自动方法,但我们希望自己处理生成): 我现在正尝试使用以下方法对此进行测试: DECLARE @ret int EXEC @ret = dbo.GetNextID 'Client','iclientid',1 PRINT @ret 我得到一个错误: 找不到列“dbo”或用户定义函数或聚合“dbo.newid”,或者名称不明确 正如我所说的,我是SQL新手,我确信我遗漏了一些非
DECLARE @ret int
EXEC @ret = dbo.GetNextID 'Client','iclientid',1
PRINT @ret
我得到一个错误:
找不到列“dbo”或用户定义函数或聚合“dbo.newid”,或者名称不明确
正如我所说的,我是SQL新手,我确信我遗漏了一些非常简单的东西
解决方案
由于无法从函数访问存储过程,因此我决定讨论允许自动递增的理由。由于这是一次到内部数据库的转换,因此设置表以允许它,然后在数据传输后更改它似乎是处理它的最佳方式。尝试此操作以执行此功能
DECLARE @ret int
SET @ret = (SELECT dbo.GetNextID ('Client','iclientid',1))
PRINT @ret
您不能在函数中调用存储过程。这是一个函数,所以将其称为
选择GetNextID('Client','iclientid',1)
以执行…不幸的是,这会给我同样的错误。如果删除dbo,则会出现另一个错误,即“GetNextID”不是可识别的内置函数名。正如@Gatej所建议的,从函数中调用存储过程是不合适的。你为什么不直接给程序打电话呢。您可以作为DECLARE@id int;EXEC dbo.newid'Client','iclientid',1,@id OUTPUT
。然后选择@id
@user2989408:我无法直接调用存储过程,因为在将多行数据从一个表复制到另一个表时,我正在使用它创建新的主键。我需要select语句中的函数映射到主键。我知道如果我们只允许SQL自动更新主键,这会更容易,但这不是管理层想要的方式。
DECLARE @ret int
EXEC @ret = dbo.GetNextID 'Client','iclientid',1
PRINT @ret
DECLARE @ret int
SET @ret = (SELECT dbo.GetNextID ('Client','iclientid',1))
PRINT @ret