2016-07-31 29 views
0

我有一個存儲過程與SQL Server中的一個表的INSERT語句2012可選列的值

它列出了所有列和值,例如:

insert into TABLE_NAME (name, rating, link) 
values (@name, @rating, @link). 

我遇到的問題是,一些列被指定爲空值,但作爲空字符串傳遞給存儲過程的值(或零爲int列類型,允許爲空),我不想插入空字符串或在允許空值的列中爲零。

有沒有辦法修改插入語句,以排除那些不應插入值的列,只根據傳入參數的值?

回答

1

您不能動態地從插入語句中排除值,但如果輸入值爲空字符串或任何不需要的值,則可以使用the NULLIF function將輸入值轉換爲NULL

+0

完美,這就是我所需要的。我沒有意識到這一點。 –

1
INSERT INTO TABLE_NAME (name, rating, link) 
SELECT NULLIF(@name, ''), NULLIF(@rating, 0), NULLIF(@link, '') 
0

我不認爲SQL Server允許使用 「默認」,在那裏你可以說一個表達式:

insert into TABLE_NAME (name, rating, link) 
    values (coalesce(@name, default), coalesce(@rating, default), coalesce(@link, default)) 

所以,離開動態SQL。像這樣的:

declare @sql nvarchar(max); 

set @sql = 'insert into TABLE_NAME(name, rating, link) 
       values (' + (case when @name is null then 'default' else '@name' end) + ', ' + 
         (case when @rating is null then 'default' else '@rating' end) + ', ' + 
         (case when @link is null then 'default' else '@link' end))'; 

exec sp_executesql @sql, N'@name ??, @rating ??, @link ??', 
     @name = @name, @rating = @rating, @link = @link;