Невозможно вставить в динамический запрос - PullRequest
0 голосов
/ 23 августа 2011

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

   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('+@GroupID+',
        '''+@GroupName+''',
        '''+@Username+''' ,
        getdate(),
        '+@ParentID+',
        1,
       )'
        execute sp_executesql @query=@Insertstring

Таблица GroupDetails принимает пустые значения для всех столбцов ... но когда я выполню хранимую процедуру таким образом ...

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

Я не могу вставить. Почему это не работает в запросе Dyanmic, пожалуйста, помогите мне ...

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Вам не нужен динамический 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

У меня также есть значения по умолчанию для CreatedOn и IsActive в таблице

0 голосов
/ 23 августа 2011

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

Чтобы исправить это, вам нужно обернуть всеобнуляемые элементы с ISNULL(@param, 'null').

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

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