• msimone - Thursday, February 1, 2018 4:42 AM

    Hello, i have a discussion with a co-worker about normal code or dynamic code in a OLTP.
    The example is:

    create table dbo.test (id smallint primary key, description nvarchar(50))

    go
    create procedure dbo.test1 (@Id smallint = null)
    as
    declare @comando nvarchar(1024)
    set @comando='select id,description from dbo.test '
    set @inter='@id smllint'
    if @id is not null
     set @comando=@comando+'where id=@id'
    exec sp_executesql @comando,@inter,@id=@id
    go
    create procedure dbo.test2 (@id smallint,@rows int)
    as
    select top (@rows) id,description from dbo.test where @id>=@id

    In yours opinión, what is the best solution for a lot of executions?

    To be completely honest I would say they are both flawed. The first one is just a strange way to use an optional parameter and dynamic sql just adds layers of complexity where it isn't needed. The second one at first glance is good but you are using top and there is no order by. That means you have no way of knowing what rows you will get because it can and will change between executions.

    _______________________________________________________________

    Need help? Help us help you.

    Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.

    Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.

    Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
    Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
    Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
    Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/