Sql server 将数据从函数传递到变量

Sql server 将数据从函数传递到变量,sql-server,tsql,Sql Server,Tsql,我想将数据从函数传递到变量,但我遇到了一个错误 DECLARE @KullaniciID int SET @KullaniciID = SELECT GetActivePersonelID 错误: 关键字“select”附近的语法不正确 功能: CREATE FUNCTION [dbo].[F15_GetActivePersonelID] (@P int) RETURNS int AS BEGIN DECLARE @KullaniciID int SET @Kulla

我想将数据从函数传递到变量,但我遇到了一个错误

DECLARE @KullaniciID int

SET @KullaniciID = SELECT GetActivePersonelID
错误:

关键字“select”附近的语法不正确

功能:

CREATE FUNCTION [dbo].[F15_GetActivePersonelID]
   (@P int)
RETURNS int
AS
BEGIN
    DECLARE @KullaniciID int

    SET @KullaniciID = (SELECT KullaniciID FROM IT15_Kullanicilar  
                        WHERE KullaniciKodu = dbo.F15_GetKullaniciConn ())

    RETURN (SELECT MAX(PersonelID) FROM IT01_Personel  
            WHERE KullaniciID = @KullaniciID)
END
选项1,通过设置:

SET @KullaniciID = (SELECT [dbo].[F15_GetActivePersonelID](123))
选项2,使用内联语法:

SELECT @KullaniciID = [dbo].[F15_GetActivePersonelID](123)
我建议避免在SQL Server中使用标量函数,因为已知的性能和扩展问题。
不过,SQL Server 2019有一些改进。

SELECT
不能在
=
运算符之后使用。您可能需要使用子查询,或者最初使用
SELECT
而不是
SET
。我不能使用as SET@kullanicid=GetActivePersonelID。错误是无效的列名“GetActivePersonelID”。函数在@EmreYıldırım之后有括号(
()
F15\u GetActivePersonelID本身将引用一列,而不是函数,就像从dbo选择GETDATE一样。MyTable
实际上将从表
MyTable
返回名为
GETDATE
的列的值,而不是从函数
GETDATE()
返回的当前日期和时间。