2015-10-04 108 views
0

我有這個存儲過程存儲過程來支持Unicode字符

ALTER PROC [Resource_Control].[sp_LocationsInsert] 
@name nvarchar(100) = NULL, 
@address nvarchar(500) = NULL 
AS 

SET NOCOUNT ON 
SET XACT_ABORT ON 

BEGIN TRAN 

INSERT INTO [Resource_Control].[Location] ([name], [address]) 
SELECT N'@name', N'@address' 

COMMIT 

名稱和地址欄都爲nvarchar 做我在我的參數需要N + 如果是的話,我把它們放在正確的地方?

+3

旁註:你應該** **不使用'sp_'前綴爲您存儲過程。微軟[留作自己使用前綴(見*命名存儲過程*)(http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),和你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

回答

1

不,你不需要它們。

Demo

INSERT INTO [Resource_Control].[Location] ([name], [address]) 
SELECT N'@name', N'@address' 

會插入值 '@name' 和 '@address' 成列。

您需要使用:

INSERT INTO [Resource_Control].[Location] ([name], [address]) 
SELECT @name, @address; 

您使用N''字符串字面量並不像變量:

DECLARE @var NVARCHAR(100) = N'text';