Почему динамический SQL не работает - PullRequest
0 голосов
/ 12 июля 2011

Почему не работает динамический SQL ??

код в C #:

 this.DataAccess.AddParametr("@where","WHERE ta.IdMoinRef in(112,113,115)");

код в sqlServer:

ALTER Procedure [dbo].[sp_tblAsnad_SelectAllForReport]
@where nvarchar(max)
As
Begin                                       
Select
        ta.IdMoinRef,
        ta.IdTafzeliRef,
        ta.ShHesab,
        ta.Bd,
        ta.Bs,
        ta.ShSnd,
        ta.AtfSnd,
        ta.DateSnd,
        mo.Hmoin,
        co.Hcol,
        gr.Hgroup,
        co.IdGroupRef,
        mo.IdColRef
    From tblAsnad as ta
    inner join tblMoin as mo on ta.IdMoinRef=mo.IdMoin
    inner join tblCol as co on mo.IdColRef=co.IdCol
    inner join tblGroup as gr on co.IdGroupRef=gr.IdGroup
    exec(@where)
End

Ответы [ 4 ]

4 голосов
/ 12 июля 2011

Ты в замешательстве. Вы должны заключить весь ваш оператор в команду. Вы пытаетесь выполнить один запрос, а затем дополнительный запрос. Вам нужно проанализировать ваш основной запрос вместе с вашим параметром, например,

DECLARE @sql VARCHAR(1000)
SET @sql = "SELECT ... " + @where -- Your full query.
exec(@sql)
3 голосов
/ 12 июля 2011

Вы пытаетесь выполнить только предложение where.Для операторов динамического SQL вы должны построить весь оператор в виде строки:

           @s = "select * from T " + @where_clause
           exec(@s)
2 голосов
/ 12 июля 2011

Вам нужно выполнить EXEC весь запрос в виде одной строки, а не только предложение WHERE.

0 голосов
/ 12 июля 2011

ваш код передает строку WHERE в качестве строкового параметра.Итак, что ваш процесс будет выполнять так:

ALTER Procedure [dbo].[sp_tblAsnad_SelectAllForReport]
@where nvarchar(max)
As
Begin                                       
Select
        ta.IdMoinRef,
        ta.IdTafzeliRef,
        ta.ShHesab,
        ta.Bd,
        ta.Bs,
        ta.ShSnd,
        ta.AtfSnd,
        ta.DateSnd,
        mo.Hmoin,
        co.Hcol,
        gr.Hgroup,
        co.IdGroupRef,
        mo.IdColRef
    From tblAsnad as ta
    inner join tblMoin as mo on ta.IdMoinRef=mo.IdMoin
    inner join tblCol as co on mo.IdColRef=co.IdCol
    inner join tblGroup as gr on co.IdGroupRef=gr.IdGroup
    exec('WHERE ta.IdMoinRef in(112,113,115)')
End

Что, очевидно, неправильно.Вся ваша команда должна быть в тексте команды здесь.

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