我有一个动态查询。
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查询中不起作用请帮帮我...
答案 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说的话。