繁体   English   中英

SQL Server:在存储过程中使用bigint变量

[英]SQL Server : use bigint variable in stored procedure

很简单,我正在调用一个从一个表中获取主键的过程,然后将该键存储在变量中,以便随后可以将其插入需要外键的另一张表中。 该变量是我期望的值,但是当我使用它时,它什么也不返回。

尝试查看之后,似乎是WHERE子句和使用变量的问题

DECLARE @ClientId bigint;

SELECT * 
FROM Testing.dbo.Client 
WHERE ClientID = @ClientId

@ClientId值为2

表中的a作为客户端ID的值为2

当我运行它时,我得到了我期望的结果

select * 
from Testing.dbo.Client 
where ClientID = 2

这是它的设置

DECLARE @ClientId int;
EXECUTE @ClientId = Testing.dbo.GetClientID @ClientName;

其中GetClientID为以下内容

USE Testing
GO
CREATE PROCEDURE GetClientId
    @ClientName nvarchar(50)
AS 
    SELECT ClientID FROM Testing.dbo.Client WHERE ClientName = @ClientName
GO

现在可以解决更多问题,因此在调用proc后不会设置ClientId

您需要初始化变量,否则它包含NULL

DECLARE @ClientId bigint = 2; 
select * from Testing.dbo.Client where ClientID = @ClientId;

如果您将其放在参数列表中,请不要使用以下名称创建变量:

CREATE PROC stored_procedure
    @ClientID BIGING
AS
BEGIN
   select * from Testing.dbo.Client where ClientID = @ClientId;
END

如果要通过存储过程设置变量,这是正确的方法:

DECLARE @ClientId Table(ClientId int);

Insert Into @ClientId(ClientId)
Exec Testing.dbo.GetClientID @ClientName;

select * 
from Testing.dbo.Client 
where ClientID = (Select ClientId From @ClientId);

如果您的存储过程引发许多行,则更改In= ,如下所示:

select * 
from Testing.dbo.Client 
where ClientID in (Select ClientId From @ClientId);

我设法使用以前从未遇到过的OUTPUT变量进行计算

USE Testing
GO
CREATE PROCEDURE AddReading
@ClientName NVARCHAR(50),
@MonitorName NVARCHAR(50),
@DateTime DATETIME,
@Temperature DECIMAL(12, 10),
@Humidity DECIMAL (12, 10),
@Staleness DECIMAL (12, 10)
AS 
DECLARE @ClientId int;
EXEC Testing.dbo.GetClientId @ClientName, @ClientId OUTPUT;

INSERT INTO Testing.dbo.Reading 
(ClientID, MonitorName, DateTime, Temperature, Humidity, Staleness)
VALUES (@ClientId, @MonitorName, @DateTime, @Temperature, @Humidity, @Staleness);
GO

proc GetClientId在哪里

USE Testing
GO
CREATE PROCEDURE GetClientId
@ClientName nvarchar(50),
@ClientId bigint OUTPUT
AS 
Select @ClientId = ClientID FROM Testing.dbo.Client WHERE ClientName = @ClientName
GO

如果您认为这样做是最好的方法,或者有更好的方法,请告诉我。

如果您想这样使用:

DECLARE @ClientId int;
EXECUTE @ClientId = Testing.dbo.GetClientID @ClientName;

您可以在过程中使用RETURN @ClientID

CREATE PROC proc_GetClientID
    @ClientNeme VARCHAR(max)
AS
BEGIN
    DECLARE @ClientID BIGINT
    SELECT @ClientID=1000
    RETURN @ClientID
END


DECLARE @ClientID INT
EXEC @ClientID =dbo.proc_GetClientID 'test'
SELECT @ClientID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM