powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимые процедуры
5 сообщений из 5, страница 1 из 1
Хранимые процедуры
    #32021620
ka3ak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойму одну вещь: допустим, надо создать такую процедуру

CREATE spCountRecords(@paramName CHAR(80), @paramCount INT OUTPUT) AS
SELECT @paramCount=COUNT(*) from @paramName
GO

Где @paramName - это имя таблицы, а @paramCount - возвращаемое число записей
в последней. При сохранении процедуры выскакивает окошко, что не определена
переменная @paramName, что странно, т.к. в MSDN написано, что с
передаваемымми переменными можно работать как с обычными. Как быть? Или,
может кто знает лучший способ подстчета кол-ва записей в таблице???
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32021626
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых
CREATE procedure spCountRecords(@paramName CHAR(80...

Во-вторых
SELECT @paramCount=COUNT(*) from @paramName
У вас @paramName определана как строковая переменная, как же из ней можно делать FROM? Это должна быть таблица или (для 2000) таблица-переменная (которая как параметр всё-равно не передаётся)
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32021628
CREATE PROCEDURE spCountRecords(@paramName CHAR(80), @paramCount INT OUTPUT) AS
declare @dynsql NVARCHAR(4000)
set @dynsql=N'SELECT @paramCount=COUNT(*) from '+@paramName
exec sp_executesql @dynsql, N'@paramCount int OUTPUT', @paramCount OUTPUT
GO
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32021630
Chudik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В той же самой МСДН написано для предложения FROM следующее:

[ FROM { < table_source > } [ ,...n ] ]

< table_source > ::=
table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
| view_name [ [ AS ] table_alias ] [ WITH ( < view_hint > [ ,...n ] ) ]
| rowset_function [ [ AS ] table_alias ]
| user_defined_function [ [ AS ] table_alias ]
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| < joined_table >

< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| [ ( ] < joined_table > [ ) ]

< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER] } ]
[ < join_hint > ]
JOIN

Нигде ни слова про то, что вместо table_name можно указать переменную. Очевидно, что поэтому и ругается.
Альтернативного способа подсчета числа записей не скажу, но как можно оформить процедурку...:

create proc spCountRecords
@paramName nchar(80),
@paramCount int out
as
declare @String as nvarchar(2000)
set @String = N'select @paramCount = COUNT(*) from ' + @paramName
exec sp_executesql @String, N'@paramCount int out', @paramCount out
go
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32021631
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С некоторой вероятностью получить неправильное значение можно использовать

select name, rowcnt from sysindexes where indid=0 and name = @paramName
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимые процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]