sql - 如何在 SQL Server 中创建数据集并处理每条记录?
问题描述
我有下表:
CREATE TABLE [dbo].[proposalReviewAction]
(
[proposalReviewActionID] [INT] IDENTITY(1,1) NOT NULL,
[proposalPackageID] [INT] NULL,
[approvalTypeID] [INT] NULL,
[comments] [VARCHAR](2000) NULL,
[reviewedByID] [INT] NULL,
[reviewedDate] [DATETIME] NULL
) ON [PRIMARY]
我想返回每条记录,approvalTypeID = 100
并proposalPackageID
在另一个将数据从提案表移动到项目表的过程中使用。
我考虑过使用WHILE
循环,但似乎每个人都喜欢处理数据集,但我在 SQL/T-SQL 中找不到任何方法。
我找到了一个WHILE
循环的示例并对其进行了修改...
WHILE (SELECT[approvalTypeID] FROM [proposalReviewAction]) = 100
BEGIN
DECLARE @ppID AS INT ;
SELECT [proposalPackageID] AS ppID, [approvalTypeID] AS atID
FROM [proposalReviewAction]
IF (SELECT [approvalTypeID] AS atID FROM [proposalReviewAction]) = 100
PRINT @ppID
ELSE
BREAK
END
PRINT 'I got to the print statement';
...但我收到以下错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
然后,它打印“PRINT”语句。
任何帮助表示赞赏...
鲍勃
解决方案
您可以简单地将这些记录直接插入到您的ProjectTable
! 喜欢:
INSERT INTO [ProjectTable] (...)
SELECT proposalPackageID
FROM [proposalReviewAction]
WHERE approvalTypeID = 100
如果出于其他原因仍然需要循环,则可以使用游标而不是WHILE
. 使用游标可以帮助您逐条记录变量中的查询结果并分别处理每条记录:
DECLARE @proposalPackageID INT
DECLARE product_cursor CURSOR FOR
SELECT proposalPackageID
FROM dbo.proposalReviewAction
WHERE approvalTypeID = 100
OPEN product_cursor
FETCH NEXT FROM product_cursor INTO @proposalPackageID
WHILE @@FETCH_STATUS = 0
BEGIN
-- Insert directly into projectTable or call external process
INSERT INTO [projectTable] (proposalPackageID ...)
SELECT @proposalPackageID
FETCH NEXT FROM product_cursor INTO @proposalPackageID
END
CLOSE product_cursor
DEALLOCATE product_cursor
希望这会有所帮助
推荐阅读
- mongodb - 所有的猫鼬事件是什么,它们记录在哪里?
- ms-access - 在表单字段中的文本末尾按“Enter”后如何添加“,”并且光标没有移动到下一行?
- javascript - 使用 babel 转换 vue 模板而不是 buble
- google-bigquery - BigQuery 加载 - 控制字符作为分隔符
- python - 无法看到具有默认池设置的 SQLAlchemy 引擎一次建立多个连接
- java - Hibernate annotation issues
- python - what is proper syntax for this if statement?
- json - Textnow API Errors when logging in through a script
- azure-functions - 404 Not found error even though Function App is deployed
- angularjs - URL doesn't change after changing ui-router state