我想通过传递表名作为参数在多个表下执行存储过程。对多个表执行存储过程
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE PROCEDURE GETARTICLESPAGEWISE
@PageIndex INT = 1
,@PageSize INT = 10
,@ArticleCategory varchar(100) = 'null'
,@RecordCount INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT ROW_NUMBER() OVER
(
ORDER BY [ArticleID] ASC
)AS RowNumber
,[ArticleID]
,[ArticleName]
,[ArticleCategory]
INTO #ResultSet
FROM [ASPDOTNETARTICLES]
WHERE ArticleCategory = @ArticleCategory
SELECT @RecordCount = COUNT(*)
FROM #ResultSet
SELECT * FROM #ResultSet
WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #ResultSet
END
GO
--EXEC dbo.GETARTICLESPAGEWISE @PageIndex =1, @PageSize = 2, @ArticleCategory='Gridview',@RecordCount=0
我试过,但出现错误,试图存储过程
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
ALTER PROCEDURE GETARTICLESPAGEWISEGENERIC
@PageIndex INT = 1
,@PageSize INT = 10
,@ArticleCategory varchar(100) = 'null'
,@RecordCount INT OUTPUT
,@TableName varchar(100) = 'NULL'
AS
BEGIN
DECLARE @columnList varchar(200)
SET @columnList=' SELECT ROW_NUMBER() OVER
(
ORDER BY [ArticleID] ASC
)AS RowNumber
,[ArticleID]
,[ArticleName]
,[ArticleCategory]'
SET NOCOUNT ON;
DECLARE @sqlCommand varchar(300)
set @sqlCommand ='
SELECT '+ @columnList +'
INTO #ResultSet
FROM '+ @TableName +'
WHERE ArticleCategory ='+ @ArticleCategory+'
//i got the error in this statement
SELECT @RecordCount = COUNT(*)
FROM #ResultSet
SELECT * FROM #ResultSet
// i got the error in this statement
WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #ResultSet'
END
GO
u能给出这个问题的解决方案?
这通常是一个迹象,表明你的表的设计被打破 - 如果有多个表包含相同的数据“排序”,这样是有意义的互换对它们进行查询,它通常是因为它们应该是一个单独的表格,其中有额外的列存储当前嵌入表格名称中的数据。例如。经典的例子是你可能不应该有'MaleEmployees'和'FemaleEmployees'表。 –