Как запустить скрипт TSQL, который возвращает значение? - PullRequest
0 голосов
/ 01 мая 2009

Правильно ли я сказал, что это 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, который не был предоставлен. Как мне написать пару специальных строк, чтобы проверить это?

Ответы [ 6 ]

1 голос
/ 01 мая 2009

Для таких значений, как это, я предпочитаю использовать функции, потому что вы можете использовать их в операторах выбора:

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

вот так.

1 голос
/ 01 мая 2009

Потому что COUNT (*) означает подсчет количества строк в наборе результатов. Count (ColumnName) означает подсчет количества строк в результирующем наборе, где этот столбец не равен нулю.

См. - http://sqlinthewild.co.za/index.php/2009/04/14/on-counts/

1 голос
/ 01 мая 2009

Также вы можете использовать инструкцию 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
0 голосов
/ 01 мая 2009

Вы хотите использовать

CREATE PROCEDURE dbo.LogTable_Count

AS

SELECT Count(*) FROM LogTable

GO
0 голосов
/ 01 мая 2009
DECLARE @Count INT

EXEC logtable_count @Count OUTPUT

SELECT @Count
0 голосов
/ 01 мая 2009
declare @myout int
exec logtable_count @myout
print @myout

Редактировать: в правильном ответе указывается, что средняя строка должна быть:

exec logtable_count @myout OUTPUT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...