【发布时间】:2023-03-11 16:01:01
【问题描述】:
我是 SQL Server 的初学者。
我编写了这个查询并使用@tblName 和@count 传递给这个表名和计数
DECLARE @Base nvarchar(200)
if (object_ID('tempdb..##temp')) is not NULL
DROP TABLE ##temp
SET @Base = 'WITH Base AS (SELECT [picName],[Address],ID, ROW_NUMBER() OVER (ORDER BY Id DESC) RN FROM'
+ Quotename(@tblName) + ' GROUP BY [picName],[Address],ID)
SELECT * INTO ##temp FROM Base'
EXEC (@Base)
SELECT *
FROM ##temp
declare @command nvarchar(max)
set @command='SELECT TOP 15 [picName],[Address],(SELECT TOP 1 COUNT(Id) FROM ' + QUOTENAME(@tblName) + ') as AllSampleCount FROM ' + QUOTENAME(@tblName) +
'WHERE [Id] IN (SELECT TOP 15 Id From ##temp WHERE RN >'+ ((QUOTENAME(@Count)-1)*15)+ 'ORDER BY Id DESC) ORDER BY Id DESC'
exec (@command)
drop table ##temp
但我收到此错误
将 nvarchar 值 'SELECT TOP 15 [picName],[Address],(SELECT TOP 1 COUNT(Id) FROM [Brochure]) 转换为 AllSampleCount FROM [Brochure]WHERE [Id] IN (SELECT TOP 15 Id 从 ##temp WHERE RN >' 到数据类型 int。
【问题讨论】:
-
只需将 ((QUOTENAME(@Count)-1)*15) 替换为 STR((@Count-1)*15)
标签: sql-server sql-server-2008 stored-procedures