Как проследить вызовы функции T-SQL

Обычно довольно типично определять навигационные свойства виртуальной модели. Когда свойство навигации определяется как виртуальное, оно может воспользоваться некоторыми функциональными возможностями Entity Framework. Наиболее распространенным является ленивая загрузка.

Lazy loading - хорошая функция многих ORM, потому что она позволяет динамически получать доступ к связанным данным из модели. Он не будет излишне запрашивать связанные данные до тех пор, пока он не будет фактически доступен, что уменьшит предварительный запрос данных из базы данных.

Из книги «ASP.NET MVC 5 с Bootstrap и Knockout .js "

22
задан Daren Thomas 20 February 2009 в 09:40
поделиться

9 ответов

Почему бы не использовать SQL Profiler с добавленными событиями уровня оператора?

Редактирование : Добавьте события для Хранимых процедур: Запуск SP:Stmt или SP:Stmt Завершенные переменные Использования, чтобы отладить в случае необходимости, т.е. установить @debug ='i здесь'; UDF's, в то время как не технически хранимые процедуры, будет прослежен с событиями уровня оператора.

28
ответ дан SqlACID 29 November 2019 в 04:29
поделиться

В профилировщике SQL Вам нужно: SP:Starting, SP:StmtStarting, SP:Completed, SQL:BatchStarting. Затем Вы получаете каждую запись, выход от функций/хранимых процедур.

alter FUNCTION [dbo].[ufn_mjf](@i numeric(10))
    RETURNS numeric(20) 
AS
BEGIN
declare @datapoint varchar(10)

    set @datapoint = 'hello world'

    return @i
END
go
drop table foo
go
create table dbo.foo ( foo_id numeric(10)) 
go
delete from foo
insert into foo ( foo_id ) values ( 1 )
insert into foo ( foo_id ) values ( 2 )

select foo_id, dbo.ufn_mjf(foo_id) from foo

с этим, я добираюсь:

SQL:BatchStarting   alter FUNCTION [dbo].[ufn_mjf](@i numeric(10))
SQL:BatchStarting   drop table foo
SQL:BatchStarting   create table dbo.foo ( foo_id numeric(10)) 
SQL:BatchStarting   delete from foo
    insert into foo ( foo_id ) values ( 1 )
    insert into foo ( foo_id ) values ( 2 )
    select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:Starting select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:StmtStarting set @datapoint = 'hello world'
SP:StmtStarting return @i
SP:Completed    select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:Starting select foo_id, dbo.ufn_mjf(foo_id) from foo
SP:StmtStarting set @datapoint = 'hello world'
SP:StmtStarting return @i
SP:Completed    select foo_id, dbo.ufn_mjf(foo_id) from foo

то, что достаточно для Вас?

12
ответ дан Matthew Farwell 29 November 2019 в 04:29
поделиться

Это похоже на то, в чем Вы нуждаетесь, но это только доступно в версиях команды / про версиях Visual Studio.

4
ответ дан Rich Andrews 29 November 2019 в 04:29
поделиться

Используйте SQL Profiler, я рекомендую пойти за борт на добавляющих событиях в первый раз, когда вокруг который позволит Вам получить ощущение того, в чем Вы нуждаетесь. Не тестируя я добавил бы события для SP:StmtStarted (или Завершенный или оба), SQL:StmtStarted (снова Завершенный или Оба).

1
ответ дан JoshBerke 29 November 2019 в 04:29
поделиться

Я второй предложение SQL Profiler. Не торопитесь для установки его так, чтобы только события, которыми Вы интересуетесь, были зарегистрированы для вырезания выходного размера. Можно произвести трассировку в файл - я часто тогда загружал тот файл назад в таблицу для включения анализа. (чрезвычайно удобный для анализа производительности, хотя несомненно кто-то скажет мне в том 2008, имеет это все созданное в somwehere...)

Иногда, у Вас не будет полномочий выполнить SQL Profiler, поскольку это действительно замедляется, сервер - просят, чтобы Ваш DBA дал Вам разрешение на Ваш сервер Dev. У них не должно быть проблем с этим.

0
ответ дан kpollock 29 November 2019 в 04:29
поделиться

Хорошо в прошлом я должен был принять типичные значения, которые были бы в UDF и затем выполнили бы просто udf часть в отдельном окне запроса так же прямой SQL не udf использование типичных значений как набор переменных с объявлением и оператором набора. Если бы это выполняется от таблицы вместо того, чтобы иметь только одно значение, я настроил бы временную таблицу или табличную переменную с входными значениями и затем выполнил бы их через sql в UDF (но снова как прямой SQL не UDF) через курсор. Путем выполнения прямого SQL у Вас могли быть операторы печати в нем для наблюдения то, что происходит. Я знаю, что это - боль, но она работает. (Я прохожу подобный процесс при создании/отладке триггеров, устанавливаю #inserted и #deleted с моими тестовыми значениями и затем тестирую код, который я намереваюсь поместить в триггер, тогда глобальная замена # ни с чем и добавить создать триггерный код.)

0
ответ дан HLGEM 29 November 2019 в 04:29
поделиться

Возможно, можно использовать SQL CLR, чтобы сделать трассировку, как описано здесь , Как войти в систему T-SQL

0
ответ дан Community 29 November 2019 в 04:29
поделиться

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

, Например, функция mySum ниже

CREATE FUNCTION mySum
(   
    @param1 int,
    @param2 int
)
RETURNS INT AS
BEGIN
    DECLARE @mySum int

    SET @mySum = @param1

    SET @mySum = @mySum + @param2

    RETURN @mySum

END
GO
SELECT dbo.mySum(1, 2)

превратилась бы

CREATE FUNCTION mySumDebug
(   
    @param1 int,
    @param2 int
)
RETURNS @myTable TABLE
(
    [mySum] int,
    [debug] nvarchar(max)
)
AS
BEGIN
    DECLARE @debug nvarchar(max)

    SET @debug = 'Declare @mySum variable. '
    DECLARE @mySum int

    SET @debug = @debug + 'Set @mySum = @param1(' + CONVERT(nvarchar(50), @param1) + ') '
    SET @mySum = @param1


    SET @debug = @debug + 'Add @param2(' + CONVERT(nvarchar(50), @param2) + ') to @mySum(' + CONVERT(nvarchar(50), @mySum) + ') '
    SET @mySum = @mySum + @param2

    SET @debug = @debug + 'Return @mySum variable. '

    INSERT @myTable (mySum, debug) VALUES (@mySum, @debug)

    RETURN
END
GO
SELECT mySum, debug FROM dbo.mySumDebug(1, 2)

Не идеальное решение, но полезный только для возврата некоторого текста, чтобы помочь разыскать ошибку.

0
ответ дан Robin Day 29 November 2019 в 04:29
поделиться

Я использую ШПИОНА SQL, который делает то, что Вы ищете и т.д.

ШПИОН SQL

Документация Функции ШПИОНА SQL

Входящий Сниффер SQL ШПИОНА SQL показывает входящий код SQL каждого соединения (Отслеживание оператора Includes DDL и DML)

, Эта функция разработана для SQL Server MS 2005\2008, но будет работать с SQL Server 2000 MS в ограниченном объеме. Это имеет способность к отчету и докладу на Входящем SQL. Как использовать функции: См.

Раскрытие: Я - часть команды ШПИОНА SQL.

0
ответ дан IEnumerator 29 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: