- ALTER PROCEDURE [dbo].[pUpdateSite]
- @ID BIGINT,
- @SiteName NVARCHAR(50),
- @SiteDesc NVARCHAR(500),
- @UpdateBy BIGINT,
- @C3Confirm BIT,
- @SSOUrl VARCHAR(255),
- @AuthConfirm BIT,
- @AuthUrl VARCHAR(255),
- @Remarks NVARCHAR(500)
- AS
- BEGIN
- SET NOCOUNT ON;
- DECLARE @Now DATETIME
- SET @Now=GETDATE()
- UPDATE tbSite SET SiteName=@SiteName,SiteDesc=@SiteDesc,UpdateBy=@UpdateBy,UpdateDate=@Now,C3Confirm=@C3Confirm,SSOUrl=@SSOUrl,AuthConfirm=@AuthConfirm,AuthUrl=@AuthUrl,Remarks=@Remarks WHERE ID=@ID
- END
复制代码 这个是我原来的存储过程,其中肯定有2个字段为空,要么是c3confirm和ssourl为空,要么是authconfirm和authurl为空,
于是,我用.net去执行存储过程,总是异常,从网上也没找到解决办法,我看到.net最终执行的sql语句为:
exec pUpdateSite @ID=20,@SiteName=N'哦哦噢噢噢噢',@SiteDesc=N'等等',@UpdateBy=1,@C3Confirm=default,@SSOUrl=default,@AuthConfirm=1,@AuthUrl=N'http://www.baidu.com',@Remarks=N'胜多负少' 最后,朋友给我说空值要赋默认值,于是,修改成以下代码,然后就正常了。
- ALTER PROCEDURE [dbo].[pUpdateSite]
- @ID BIGINT,
- @SiteName NVARCHAR(50),
- @SiteDesc NVARCHAR(500),
- @UpdateBy BIGINT,
- @C3Confirm BIT=NULL,
- @SSOUrl VARCHAR(255)=NULL,
- @AuthConfirm BIT=NULL,
- @AuthUrl VARCHAR(255)=NULL,
- @Remarks NVARCHAR(500)=NULL
- AS
- BEGIN
- SET NOCOUNT ON;
- DECLARE @Now DATETIME
- SET @Now=GETDATE()
- UPDATE tbSite SET SiteName=@SiteName,SiteDesc=@SiteDesc,UpdateBy=@UpdateBy,UpdateDate=@Now,C3Confirm=@C3Confirm,SSOUrl=@SSOUrl,AuthConfirm=@AuthConfirm,AuthUrl=@AuthUrl,Remarks=@Remarks WHERE ID=@ID
- END
复制代码
|