【发布时间】:2014-04-08 06:35:32
【问题描述】:
我有一个存储过程,我将一个表插入到一个临时表中,然后我使用游标逐行读取该临时表:
USE [TEST_DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[returnValidationFailures]
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP 0 * INTO TempTbl FROM USER
DECLARE cursor1 CURSOR FAST_FORWARD FOR
SELECT *
FROM USER
OPEN cursor1
INSERT INTO TempTbl
EXEC ('fetch next from cursor1')
WHILE @@FETCH_STATUS = 0
INSERT INTO TempTbl
EXEC ('fetch next from cursor1')
CLOSE cursor1
DEALLOCATE cursor1
SELECT *
FROM TempTbl
DROP TABLE TempTbl
END
我想要的是通过如下参数发送表名:
@TableNameParam varchar(10)
然后像这样插入到临时表中:
SELECT TOP 0 * INTO TempTbl FROM @TableNameParam
DECLARE cursor1 CURSOR FAST_FORWARD FOR
SELECT *
FROM @TableNameParam
这不起作用(显然)。但是我尝试过的所有其他方法都不起作用。 有什么方法可以设置 EXEC 调用的数据,例如:
EXEC ('SELECT * FROM ' + @TableNameParam
' WHERE STATUS=1')
进入临时表?
注意:我不知道表结构。
【问题讨论】:
-
您需要将表作为参数发送还是将存储过程的结果放入临时表中,还是两者兼而有之?\
-
你为什么在这里使用光标???
-
@MihaiBejenariu ,我将表名作为参数发送到存储过程。存储过程应该从该表中读取数据并将其插入到临时表中
-
@NenadZivkovic ,我在这里使用游标,因为我需要逐行处理数据。我没有在这里包含任何代码。
标签: sql sql-server stored-procedures cursor sqlparameter