Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在函数调用存储过程中找不到用户定义的函数_Sql_Ssms_Sql Function - Fatal编程技术网

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新手,我确信我遗漏了一些非

我是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