2013-04-28 72 views
0

我正在使用動態sql.here是我的sp.I想檢查null.Which接近是好的。如何在動態sql中處理null段

ALTER procedure [dbo].[proc_insertsample] 
@pname varchar(10), 
@rdatetime varchar(10), 
@fromcountry int, 
@fromoperatorid int 

as 
begin 
declare @query nvarchar(4000) 
declare @fromcountry2 varchar(10) 
declare @fromoperatorid2 varchar(10) 
set @fromcountry2 = CAST(@fromcountry as varchar(10)) 
set @fromcountry2 = isnull(@fromcountry2,0) 
set @fromoperatorid2 = cast (@fromoperatorid as varchar(10)) 
set @fromoperatorid2 = isnull(@fromoperatorid2,0) 
set @query = 'insert into sample1 (pname,rdatetime,fromcountry,fromoperatorid) values ('''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''')' 
print @query 
end 

ALTER procedure [dbo].[proc_insertsample2] 
@pname varchar(10), 
@rdatetime varchar(10), 
@fromcountry varchar(10), 
@fromoperatorid varchar(10) 

as 
begin 
declare @query nvarchar(4000) 
set @fromcountry = ISNULL(@fromcountry,'') 
set @fromoperatorid = ISNULL(@fromoperatorid,0) 
set @query = 'insert into sample1 (pname,rdatetime,fromcountry,fromoperatorid) values ('''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''')' 
print @query 
end 

。我是對矯正sp.Previously段是INT,改爲varchar.Can我設置一個值,輸入para.I不想再創建變量ISNULL結果。我直接把isnull放在我正在打印和執行的動態字符串中,但沒有用。

回答

0

我不完全知道你是問什麼,但如果你可以給你想要的默認值默認參數在存儲過程中定義參數的默認值:

@fromcountry VARCHAR(10) = '' 

所以你第二SP應該是這樣的:

ALTER procedure [dbo].[proc_insertsample](@pname VARCHAR(10) = '', 
              @rdatetime VARCHAR(10) = '', 
              @fromcountry VARCHAR(10) = '', 
              @fromoperatorid VARCHAR(10) = '' 
AS 
BEGIN 
    DECLARE @query AS NVARCHAR(4000) 

    SET @query = 'INSERT INTO sample1 (pname,rdatetime,fromcountry,fromoperatorid) VALUES ('''[email protected]+''','''[email protected]+''','''[email protected]+''','''[email protected]+''')' 
    PRINT @query 
END 

如果你不帶參數稱爲proc_insertsample1,你@query變量應該是這樣的:

INSERT INTO sample1 (pname,rdatetime,fromcountry,fromoperatorid) 
VALUES ('', '', '', '', '') 

或者,你可以把ISNULL檢查權在動態SQL:

SET @query = 'INSERT INTO sample1 (pname,rdatetime,fromcountry,fromoperatorid) VALUES (''' + @pname + ''',''' + @rdatetime + ''',''' + ISNULL(@fromcountry,'') + ''',''' + ISNULL(@fromoperatorid,'') + ''')' 

在這種情況下,你的@query變量(假定你有「約翰」的PNAME和'10/01/2007' 的rdatetime)看起來像這樣:

INSERT INTO sample1 (pname,rdatetime,fromcountry,fromoperatorid) 
VALUES ('John','10/01/2007','','') 

這有幫助嗎?

0

處理數據完整性問題的最佳方法是將DEFAULT和NOT NULL約束放在要插入的表中的字段上。這樣你將驗證邏輯從存儲過程移動到表本身。

它也將幫助您在將來構建一個強大的數據庫設計。

給你一個現實生活的例子,你要做的就是在每次將硬幣插入停車計時器時檢查你的口袋裏是否合適的硬幣和浪費時間,而不是僅僅在硬幣槽停車計時器足夠小,只能接受某些硬幣尺寸並拒收未知的硬幣。