在 SQL IF-ELSE 语句中设置变量
Setting up a variable in a SQL IF-ELSE statement
我有以下声明:
IF (SELECT IntId
FROM MyTable
WHERE Name = 'Jon') IS NOT NULL
BEGIN
PRINT IntId
END
ELSE
BEGIN
PRINT 'Not an id'
END
IntId 是 table 的 PK,我想看看 Name = Jon
是否存在它,但它超出了范围,所以如何打印它?
你有两个选择。再次重复 select ,由于性能问题,不推荐这样做。第二个它存储在一个变量中。
Declare @IntId int
SELECT @IntId = IntId
FROM MyTable
WHERE Name = 'Jon'
IF (@IntId) IS NOT NULL
BEGIN
PRINT @IntId
END
ELSE
BEGIN
PRINT 'Not an id'
END
您可以通过几种方式完成此操作。
使用变量
DECLARE @IntId int;
SET @IntId = (
/* I added a TOP 1, in case your query returns more
than one row. If it does return more than 1 row, you're
looking at looping data to a print statement, and that's
a different question. */
SELECT TOP 1 IntId
FROM MyTable
WHERE Name = 'Jon'
ORDER BY IntId
)
IF @IntId IS NOT NULL
BEGIN
PRINT @IntId
END
ELSE
BEGIN
PRINT 'Not an id'
END
如果存在,select 某物
IF EXISTS (SELECT 1 FROM MyTable WHERE Name = 'Jon')
BEGIN
SELECT IntId FROM MyTable WHERE Name = 'Jon'
END
ELSE
BEGIN
PRINT 'Not an id'
END
在这种情况下,如果使用 SQL Server 2017+,您 可以做什么 使用 string_agg如果有重复,会给你所有的 ID 值:
declare @id varchar(max);
select @id=String_Agg(IntId, ',')
from MyTable
where [Name] = 'jon';
print isnull(@id, 'not an id');
我有以下声明:
IF (SELECT IntId
FROM MyTable
WHERE Name = 'Jon') IS NOT NULL
BEGIN
PRINT IntId
END
ELSE
BEGIN
PRINT 'Not an id'
END
IntId 是 table 的 PK,我想看看 Name = Jon
是否存在它,但它超出了范围,所以如何打印它?
你有两个选择。再次重复 select ,由于性能问题,不推荐这样做。第二个它存储在一个变量中。
Declare @IntId int
SELECT @IntId = IntId
FROM MyTable
WHERE Name = 'Jon'
IF (@IntId) IS NOT NULL
BEGIN
PRINT @IntId
END
ELSE
BEGIN
PRINT 'Not an id'
END
您可以通过几种方式完成此操作。
使用变量
DECLARE @IntId int;
SET @IntId = (
/* I added a TOP 1, in case your query returns more
than one row. If it does return more than 1 row, you're
looking at looping data to a print statement, and that's
a different question. */
SELECT TOP 1 IntId
FROM MyTable
WHERE Name = 'Jon'
ORDER BY IntId
)
IF @IntId IS NOT NULL
BEGIN
PRINT @IntId
END
ELSE
BEGIN
PRINT 'Not an id'
END
如果存在,select 某物
IF EXISTS (SELECT 1 FROM MyTable WHERE Name = 'Jon')
BEGIN
SELECT IntId FROM MyTable WHERE Name = 'Jon'
END
ELSE
BEGIN
PRINT 'Not an id'
END
在这种情况下,如果使用 SQL Server 2017+,您 可以做什么 使用 string_agg如果有重复,会给你所有的 ID 值:
declare @id varchar(max);
select @id=String_Agg(IntId, ',')
from MyTable
where [Name] = 'jon';
print isnull(@id, 'not an id');