Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
в спшке есть код

	select
		@RecordCount = rows
	from
		dbo.sysindexes
	where
		id = Object_ID('dbo.Table') and indid < 2;
	select @RecordCount;

выполняю спшку в ЕМ - выводит результат
если выполняю из ASP.NET приложения - не выводит просто фокус какойто

делаю так

select @RecordCount = count(*) from dbo.Table
выводится результат и интерактивно и из приложения, но в десятки раз медленнее

в чем тут две большие разницы? Помогите пожалуйста
23 май 09, 00:17    [7218188]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Glory
Member

Откуда:
Сообщений: 104760
Что мешает просто написать

select rows
	from
		dbo.sysindexes
	where
		id = Object_ID('dbo.Table') and indid < 2;
23 май 09, 00:32    [7218210]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
Glory
Что мешает просто написать

select rows
	from
		dbo.sysindexes
	where
		id = Object_ID('dbo.Table') and indid < 2;


мешает то что потом нельзя посчитать сколько это страниц получицца если пейджить таблицу
23 май 09, 00:39    [7218214]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
и не понятно почему из программы не удаеться получить rows?
23 май 09, 01:25    [7218265]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Glory
Member

Откуда:
Сообщений: 104760
sp
и не понятно почему из программы не удаеться получить rows?

Потому что
select
@RecordCount = rows
from
dbo.sysindexes
where
id = Object_ID('dbo.Table') and indid < 2;
не возвращает в программу rows. Он присваевает его переменной @RecordCount
23 май 09, 02:00    [7218298]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
Glory
sp
и не понятно почему из программы не удаеться получить rows?

Потому что
select
@RecordCount = rows
from
dbo.sysindexes
where
id = Object_ID('dbo.Table') and indid < 2;
не возвращает в программу rows. Он присваевает его переменной @RecordCount


блин ну я ж не такой тупой - я сказал что rows не возвращает результат и для проверки этого я делал select @RecordCount

дальше в спшке @RecordCount используецца по назначению, но почемуто изза невозврата row не выполняет своего предназначения
23 май 09, 02:09    [7218307]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
sp
и не понятно почему из программы не удаеться получить rows?


USE DBNAME;
select
		@RecordCount = rows
	from
		dbo.sysindexes
	where
		id = Object_ID('dbo.Table') and indid < 2;
	select @RecordCount;
23 май 09, 14:39    [7218713]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
Александр Волок (def1983)


USE DBNAME;
select
		@RecordCount = rows
	from
		dbo.sysindexes
	where
		id = Object_ID('dbo.Table') and indid < 2;
	select @RecordCount;


попробовал ->
Msg 154, Level 15, State 1, Procedure Persons_GetGrid, Line 10
a USE database statement is not allowed in a procedure, function or trigger.
23 май 09, 23:18    [7219356]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
sp

Msg 154, Level 15, State 1, Procedure Persons_GetGrid, Line 10
a USE database statement is not allowed in a procedure, function or trigger.

Ну да, у вас же процедура...

А как с правами? выполняли ли в "EM" и в приложении код под одинаковым пользователем?
23 май 09, 23:36    [7219366]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
Да и под sql2008 не хорошо использовать старые системные представления, оставленные для совместимости. Вот пример, как стоит сейчас опрашивать количество строк:

SELECT
[RowCount] = SUM
(
CASE
WHEN (pt.index_id < 2) AND (au.type = 1) THEN pt.rows
ELSE 0
END
)
FROM
sys.tables tbl
INNER JOIN sys.partitions pt
ON tbl.object_id = pt.object_id
INNER JOIN sys.allocation_units au
ON pt.partition_id = au.container_id
WHERE tbl.object_id = Object_ID('dbo.Table')
23 май 09, 23:39    [7219370]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
Александр Волок (def1983)
sp

Msg 154, Level 15, State 1, Procedure Persons_GetGrid, Line 10
a USE database statement is not allowed in a procedure, function or trigger.

Ну да, у вас же процедура...

А как с правами? выполняли ли в "EM" и в приложении код под одинаковым пользователем?


в ЕМ права Админа а спшка выполняется под NT AUTHORITY\NETWORK SERVICE с правами на исполнение спшки
23 май 09, 23:46    [7219380]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
Александр Волок (def1983)
Да и под sql2008 не хорошо использовать старые системные представления, оставленные для совместимости. Вот пример, как стоит сейчас опрашивать количество строк:

SELECT
[RowCount] = SUM
(
CASE
WHEN (pt.index_id < 2) AND (au.type = 1) THEN pt.rows
ELSE 0
END
)
FROM
sys.tables tbl
INNER JOIN sys.partitions pt
ON tbl.object_id = pt.object_id
INNER JOIN sys.allocation_units au
ON pt.partition_id = au.container_id
WHERE tbl.object_id = Object_ID('dbo.Table')


ну я ж не настолько специализируюсь в SQL чтоб знать об этом поэтому использую то что в статьях пишут )
но всеравно из под ASP.NET не удается получить RowCount, а интерактивно в ЕМ - получаецца
23 май 09, 23:53    [7219394]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
sp

в ЕМ права Админа а спшка выполняется под NT AUTHORITY\NETWORK SERVICE с правами на исполнение спшки


А так?
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'SA' --  или же учетка, под которой вы выполняете в EM
AS
SELECT...
24 май 09, 00:50    [7219468]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
Александр Волок (def1983)

А так?
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'SA' --  или же учетка, под которой вы выполняете в EM
AS
SELECT...


Спасибо большое!
sa не оказалосьу меня в списке юзеров поэтому написал 'dbo' и заработало!
а почему же такие какието непонятки если я же дал юзеру права на исполнения sp - почему он еще должен какието права запрашивать? этож как-то не кашерно ? :)
24 май 09, 04:04    [7219533]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
dbo.sysindexes в 2008 это всего лишь представление под котором лежит несколько внутренних таблиц, данные из некоторых, причем, доступны только "владельцу базы", т.е. пользователю DBO.


Use EXECUTE AS OWNER in the following scenario:

You want to be able to change owner of the module without having to modify the module itself. That is, OWNER automatically maps to the current owner of the module at run time.
24 май 09, 09:06    [7219576]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
sp
Спасибо большое!
sa не оказалосьу меня в списке юзеров поэтому написал 'dbo' и заработало!
а почему же такие какието непонятки если я же дал юзеру права на исполнения sp - почему он еще должен какието права запрашивать? этож как-то не кашерно ? :)
Прикольно у вас приложение написано.

При любых ошибках оно молча продолжает работать, делая вид, что всё нормально.

Эдак вы долго будете разбираться с каждой пустяковой ошибкой, типа этой...
24 май 09, 20:23    [7220358]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
alexeyvg
sp
Спасибо большое!
sa не оказалосьу меня в списке юзеров поэтому написал 'dbo' и заработало!
а почему же такие какието непонятки если я же дал юзеру права на исполнения sp - почему он еще должен какието права запрашивать? этож как-то не кашерно ? :)
Прикольно у вас приложение написано.

При любых ошибках оно молча продолжает работать, делая вид, что всё нормально.

Эдак вы долго будете разбираться с каждой пустяковой ошибкой, типа этой...


Дык я ж фрося-семиделка - кучу смежных технологий вынужден использовать - отсюда нет времени разбираться досконально
Ноя все делал как в статьях по ASP.NET писали - дал права на execute NT AUTHORITY\NETWORK SERVICE чтоб IIS мог выполнять процедурки на SQL сервере, а про то что этой спшке нужно давать еще права dbo на исполнение - там ничего не было написано
24 май 09, 21:17    [7220433]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
sp
Дык я ж фрося-семиделка - кучу смежных технологий вынужден использовать - отсюда нет времени разбираться досконально
Не надо досконально.

Это просто главное правило любого программиста - никогда не гасить ошибок, кроме случаев, когда это решение тщательно продумано и вызвано острой необходимостью.

Если бы вы не гасили ошибки, то и эту сразу же поймали бы и исправили.
25 май 09, 11:59    [7222012]     Ответить | Цитировать Сообщить модератору
 Re: sql2008 странности в интерактивном исполнениии и из приложения sp  [new]
sp
Member

Откуда:
Сообщений: 3947
alexeyvg
sp
Дык я ж фрося-семиделка - кучу смежных технологий вынужден использовать - отсюда нет времени разбираться досконально
Не надо досконально.

Это просто главное правило любого программиста - никогда не гасить ошибок, кроме случаев, когда это решение тщательно продумано и вызвано острой необходимостью.

Если бы вы не гасили ошибки, то и эту сразу же поймали бы и исправили.


в смысле не использовать try...catch?
25 май 09, 16:27    [7224097]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить