我在sql中写了变量
这是代码
DECLARE @rowNumber INT
SET @rowNumber = 'SELECT CAST((-1) * ROW_NUMBER() over (ORDER BY (t.Id)) AS INT)
FROM [dbo].[AbpTenants] as t
ORDER BY t.Id'
EXEC (@rowNumber)
但是当我尝试运行它时,出现了此错误。
S0001] [245]从[dbo]转换varchar值'SELECT CAST((-1)* ROW_NUMBER()over(ORDER BY(t.Id))AS INT)时,转换失败。[AbpTenants]为t将t.Id'排序为int数据类型。
问题出在哪里,如何将其转换为int?
答案 0 :(得分:1)
您的查询由于多种原因而没有意义:
我怀疑您要计算,而不是子查询。如果要计算表中的行数,请使用:
DECLARE @rowNumber INT;
SELECT @rowNumber = COUNT(*)
FROM [dbo].[AbpTenants] t;
这与您的逻辑并不完全相同,但确实有道理。
答案 1 :(得分:0)
您可以使用负数进行乘法:
DECLARE @rowNumber INT
SET @rowNumber = COUNT(*) * -1
FROM [dbo].[AbpTenants] t;
SELECT @rowNumber
编辑::如果想要所有行的行号,则需要表变量。
您有一个定标器变量@rowNumber
,它将仅包含单个值,而不包含多个值。
DECLARE @rownumber TABLE (id INT, rowNumbers INT)
INSERT INTO @rownumber (id, rowNumbers)
SELECT t.id, ROW_NUMBER() OVER (ORDER BY t.id)
FROM [dbo].[AbpTenants] t;
SELECT *
FROM @rownumber;