2011-08-23 3 views
-1

У меня есть динамический запрос.Невозможная вставка в динамическом запросе

create procedure SP_InsertGroup 
    (
    @GroupID nvarchar(50) 
    ,@GroupName nvarchar(max) 
    ,@ParentId int 
    ,@Username nvarchar(50) 
    ) 

    Declare @Insertstring nvarchar(max); 
    set @Insertstring='INSERT INTO GroupDetails 

     (GroupID 
     ,GroupName 
     ,CreatedBy 
     ,CreatedOn 
     ,ParentID 
     ,IsActive 
     ) 
values('[email protected]+', 
     '''[email protected]+''', 
     '''[email protected]+''' , 
     getdate(), 
     '[email protected]+', 
     1, 
     )' 
     execute sp_executesql @[email protected] 

стол GroupDetails принять аннулирует для всех столбцов ... но вэнь я EXEC хранимую процедуру таким образом ..

 exec Sp_insertGroup '1',null,'1',null 

Я не могу insert.why делает это не работает в Dyanmic запросе пожалуйста, помогите мне ...

+3

Когда-либо слышал о «SQL Injection»? Почему это тоже должен быть динамический SQL? – gbn

+0

-1 для того, чтобы не понимать SQL-инъекцию и желание динамического sql без учета последствий – gbn

+0

i knw abt, что мне нужно реализовать в DYnamic SQl – Vijay

ответ

2

Вам не нужно динамический SQL

create procedure SP_InsertGroup 
    @GroupID nvarchar(50) 
    ,@GroupName nvarchar(max) 
    ,@ParentId int 
    ,@Username nvarchar(50) 
    AS 
    INSERT GroupDetails 
     (GroupID 
     ,GroupName 
     ,CreatedBy 
     ,CreatedOn 
     ,ParentID 
     ,IsActive 
     ) 
    values(@GroupID, @GroupName, @Username, getdate(), @ParentID, 1) 
    GO 

Я бы также иметь значения по умолчанию для CreatedO n и IsActive в таблице

+0

Я хочу, чтобы это динамическое sql iknw как реализовать в целом ..... – Vijay

0

Причина, по которой она не работает, заключается в том, что когда вы строите динамическую строку SQL, а некоторые из элементов имеют значение null, она делает всю строку нулевой.

Чтобы исправить это, вам необходимо обернуть любые элементы с нулевым значением с помощью ISNULL(@param, 'null').

Но не делайте этого, делайте то, что говорит @gbn.

+0

Исправление должно быть более сложным из-за окружающих кавычек в двух случаях. Но в любом случае, я согласен с вами в том, что ответ gbn - это путь. –

+0

@ Энди М - да, ты прав. У меня возникло соблазн не включать какое-либо примерное решение, чтобы отвлечь их от этого. – cjk

+0

Мне нужен динамический sql, поэтому я прошу ... – Vijay

Смежные вопросы