我说它是TSQL吗?我是数据库脚本的新手。这叫脚本吗?我是新手,真的是我。
我刚刚在SQL Server Management Studio中编写了一个存储过程:
CREATE PROCEDURE dbo.LogTable_Count
@Count INT OUT
AS
SELECT @Count = Count(ExperimentId) FROM LogTable
GO
我想通过调用类似的东西来测试脚本:
exec logtable_count
但是管理工作室说它需要一个参数@Count,它没有提供。如何编写一些ad hoc行来测试它?
答案 0 :(得分:1)
此外,您可以使用RETURN语句从存储过程返回一个整数值(只有一个且仅为整数)。
您的存储过程看起来会有所不同:
CREATE PROCEDURE dbo.LogTable_Count
AS
DECLARE @Count int
SELECT @Count = Count(ExperimentId)
FROM LogTable
RETURN @Count
GO
你必须像这样调用你的存储过程:
DECLARE @RC int
EXEC @RC=dbo.LogTable_Count
PRINT @RC --or SELECT @RC
答案 1 :(得分:1)
因为COUNT(*)表示计算结果集中的行数。 Count(ColumnName)表示计算结果集中该列不为空的行数。
请参阅 - http://sqlinthewild.co.za/index.php/2009/04/14/on-counts/
答案 2 :(得分:1)
对于像这样的单个值,我更喜欢使用函数,因为你可以在select语句中使用它们:
print 'Creating countRows Stored Proc ...'
go
if exists (select * from dbo.sysobjects where name = 'countRows') drop function countRows;
go
create function dbo.countRows()
-- **************************************************************************
-- Procedure: countRows()
-- Author: Ron Savage
-- Date: 05/01/2009
--
-- Description:
-- This function counts the rows in a table and returns it.
-- **************************************************************************
returns integer
begin
return(select count(*) from mytable);
end
go
-- Now you can use it in a select ...
select dbo.countRows()
go
-- Or store it in a variable ...
declare @mycount integer
select @mycount = dbo.countRows()
select @mycount
go
像那样。
答案 3 :(得分:0)
declare @myout int
exec logtable_count @myout
print @myout
编辑:正确答案指出,中间一行应为:
exec logtable_count @myout OUTPUT
答案 4 :(得分:0)
DECLARE @Count INT
EXEC logtable_count @Count OUTPUT
SELECT @Count
答案 5 :(得分:0)
您想要使用
CREATE PROCEDURE dbo.LogTable_Count
AS
SELECT Count(*) FROM LogTable
GO