如何使用SQL Server 2008中的存储过程保存Unicode文本

时间:2012-01-04 18:05:52

标签: asp.net sql-server-2008 stored-procedures unicode

我正在开发一个在VS 2010中开发的多语言Web应用程序 - ASP.Net(C#)。

如果我使用没有存储过程的简单插入语句(例如

),我可以毫无问题地插入它
Insert INTO Test (E,A) VALUES('Some English Text',N'الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ')

当我为unicode数据添加N时,它工作正常。我的问题是如何在存储过程中添加此“N”,以便它可以保存数据而不会出现任何问题。我尝试以不同的方式放置N但存储过程会出现语法错误

以下是我正在使用的存储过程示例。

ALTER PROCEDURE [dbo].[usp_AddNewPageDetails]
    -- Add the parameters for the stored procedure here
            @PageNameEnglish varchar(100),
            @PageNameArabic nvarchar(300),
            @PageTitleEnglish varchar(300),
            @PageTitleArabic nvarchar(900),
            @PageDescEnglish varchar(400),
            @PageDescArabic nvarchar(1200),
            @PageKeywordsEnglish varchar(120),
            @PageKeywordsArabic nvarchar(400),
            @PageBodyEnglish varchar(MAX),
            @PageBodyArabic nvarchar(MAX),
            @PageLinkPosition int,    
AS
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
    SET NOCOUNT ON;

BEGIN
    INSERT INTO pg_Pages(
    PageNameEnglish,PageNameArabic,PageTitleEnglish,PageTitleArabic,PageDescEnglish,
    PageDescArabic,PageKeywordsEnglish,PageKeywordsArabic,PageBodyEnglish,
    PageLinkPosition,PageLayoutPosition,PageBannerImageEnglish,)
    VALUES
    (@PageNameEnglish,@PageNameArabic,@PageTitleEnglish,@PageTitleArabic,@PageDescEnglish,
    @PageDescArabic,@PageKeywordsEnglish,@PageKeywordsArabic,@PageBodyEnglish,)
END

感谢回复。

2 个答案:

答案 0 :(得分:4)

N是Unicode字符串文字的一部分,就像引号一样。您可能尝试使用@parameter名称添加N,但这不是必需的(甚至是错误的)。

所以使用

之类的语法在T-SQL中调用SP
EXEC usp_AddNewPageDetails 'english text', N'arab text', etc.

就足够了。

如果您通过SqlCommand等从.Net调用SP,则不需要其他代码,因为.Net始终使用Unicode字符串。

答案 1 :(得分:0)

您能否确认表pg_Pages中列的数据类型是否适用于NVARCHAR?如果列是VARCHAR,则unicode文本将在没有警告的情况下转换为垃圾。