Sae*_*eid 4 sql t-sql sql-server sql-server-2008
假设这个脚本:
DECLARE @result TABLE(Id BIGINT);
DELETE FROM [Products].[Product]
OUTPUT DELETED.[Id] INTO @result
WHERE [Products].[Product].[Id] = 1589;
Run Code Online (Sandbox Code Playgroud)
所以继续我尝试:
1
SELECT CAST(ISNULL([Id], -1) AS BIGINT) AS N'RetValId' FROM @result;
Run Code Online (Sandbox Code Playgroud)
当[Id]null为null时返回null(无),但是这个返回-1:
2
DECLARE @mi BIGINT;
SET @mi = (SELECT [Id] FROM @result)
SELECT CAST(ISNULL(@mi, -1) AS BIGINT) AS N'RetValId'
Run Code Online (Sandbox Code Playgroud)
为什么?第一个脚本的问题在哪里?
更新
那么有没有办法检查Deleted Id是否为null返回-1如果没有返回Id而没有声明另一个变量?什么是最简单的方法?
如果您没有ID 1589的条目,那么在DELETED表中将没有记录,如果您有,那么它应该返回1589.
所以,如果你没有我认为它简单不返回任何东西,因为这个语句没有输入行:
SELECT CAST(ISNULL([Id], -1) AS BIGINT) AS N'RetValId' FROM @result;
Run Code Online (Sandbox Code Playgroud)
(如果从@result中选择SELECT*那么它应该没有行)
第二个返回-1,因为您首先设置了在select之后获得NULL值的变量.
DECLARE @mi BIGINT;
SET @mi = (SELECT [Id] FROM @result)
Run Code Online (Sandbox Code Playgroud)
(如果在此之后只选择@mi,那么它应该为NULL)
我认为这就是解释
更新:
如果没有其他变量,你可以尝试一个小技巧来实现它:
SELECT CAST(ISNULL(MAX([ID]),-1) AS BIGINT) AS N'RetValId' FROM @result;
Run Code Online (Sandbox Code Playgroud)
因为MAX,insie语句将为NULL,所以这就是诀窍.如果删除了某些内容,则ID将存在.我希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
5897 次 |
| 最近记录: |