【问题标题】:Only return N rows affected when used sqlcmd使用 sqlcmd 时仅返回受影响的 N 行
【发布时间】:2018-05-29 09:59:08
【问题描述】:

当我使用 sqlcmd 时,它返回了 N 行受影响的消息 + 结果。我只想返回受影响的 N 行消息。你知道我们是否为 sqlcmd 做一些配置吗?

【问题讨论】:

  • 问这样的问题对你没有帮助。更好地提供代码 sn-ps/ 截图。 stackoverflow.com/help/how-to-ask
  • 只抑制行数很容易,只抑制结果则不然。您需要修改您的查询以不返回结果,或将结果通过管道传送到(道德上等同于)tail -1findstr "rows affected"
  • 这对我来说真的没有意义。如果您正在执行SELECT 语句,为什么您想要结果?如果您不想要结果,SELECT 语句的意义何在?这就像执行 INSERT 语句但不希望插入行。
  • 将您的查询更改为SELECT ... INTO #temp

标签: sql-server sqlcmd


【解决方案1】:

我猜这是一个 xy 问题,我的答案基于我猜的真正 OP 的需求;他们正在检查表/语句中的行数,然后检查返回消息语句的输出以确保它符合预期。

相反,我认为 OP 奇数设置的正确方法是使用 SET NOCOUNT ON 然后创建您自己的 PRINT 语句。然而,这是过于简化的 SQL,因为我没有可使用的查询。首先,一个样本表:

USE Sandbox;
Go
--Create sample table
CREATE TABLE #test (i int);
INSERT INTO #test
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);
GO

然后解决办法:

--The solution
SET NOCOUNT ON; --This turns the normal message off

DECLARE @Count int;

SELECT @Count = COUNT(*)
FROM #test
WHERE i > 5;

IF @Count = 1 BEGIN
    PRINT '(' + CONVERT(varchar(5),@Count) + ' row affected)';
END ELSE BEGIN
    PRINT '(' + CONVERT(varchar(5),@Count) + ' rows affected)';
END

还有清理

--Clean up
GO
DROP TABLE #test;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多