动态查询中无法插入

时间:2011-08-23 06:51:19

标签: sql sql-server-2005 sql-server-2008

我有一个动态查询。

   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 个答案:

答案 0 :(得分: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

我还有表格中的CreatedOn和IsActive的默认值

答案 1 :(得分:0)

它不起作用的原因是,当您构建动态SQL字符串并且某些元素为null时,它会使整个字符串为空。

要修复它,您需要使用ISNULL(@param, 'null')包装任何可空元素。

但是不要这样做,做@gbn说的话。