2013-01-31 47 views
0

我有像這樣一個存儲過程,它基本上附加一個前綴字段,如果它不存在:存儲過程不更新領域

ALTER PROCEDURE [dbo].[AgSp_UpdateAgTbl_Licensing ](@newPrefix nvarchar, @systemName nvarchar) 

AS 
BEGIN 
     -- SET NOCOUNT ON added to prevent extra result sets from 
     -- interfering with SELECT statements. 
     SET NOCOUNT ON; 

update AgTbl_Licensing 
set UrlPrefixes = 
      case 
       when UrlPrefixes is null or UrlPrefixes = '' 
       then @newPrefix 
       else convert (nvarchar(max), UrlPrefixes) + ', '[email protected] 
      end 
where SystemName = @systemName and (UrlPrefixes not like ('%'[email protected]+'%') or UrlPrefixes is null) 

END 

我嘗試把這個像這樣:

Execute AgSp_UpdateAgTbl_Licensing 'eb_', 'EB1'; 

但更新沒有對數據庫進行 - 怎麼回事?我不能調試,因爲我沒有系統管理員

+0

如果您在代碼片外執行它,代碼是否會操作? –

+0

是的,如果我把價值,而不是使用參數的更新 – raklos

+0

我昨天以不同的格式回答了這個問題:) http://stackoverflow.com/questions/14610368/update-and-append-unless-empty/14610946# 14610946 – Kaf

回答

1

我認爲你應該聲明過程參數的長度爲;

@newPrefix nvarchar(50), @systemName nvarchar(50) 

否則,將只需要FIRST character您的字符串,因此你WHERE clause fails找到的記錄進行更新。而且你的參數並不是你期望的那樣。

1

(忽略,在一列中存儲多個值幾乎總是不如正確地將其存儲爲表中的行)

你已經兩個參數聲明到你的過程,無論是長度1.嘗試的:

ALTER PROCEDURE [dbo].[AgTbl_Licensing](@newPrefix nvarchar(100), @systemName nvarchar(100)) 

nchar and nvarchar

當在數據定義或變量聲明語句中指定n,則默認長度爲1,當n爲不specifi使用CAST功能編輯,默認長度爲30.

+0

是的,我同意,不幸的是數據庫設置不在我的控制之下。感謝解釋這個現在的作品,但卡夫的答案是第一次 – raklos