[英]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.