【问题标题】:How to save Unicode text using stored procedure in SQL Server 2008如何在 SQL Server 2008 中使用存储过程保存 Unicode 文本
【发布时间】:2012-01-04 18:05:51
【问题描述】:

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

例如,如果我使用没有存储过程的简单插入语句,我可以毫无问题地插入它

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

感谢回复。

【问题讨论】:

  • 存储过程看起来不错 - 你能向我们展示你是如何从你的 C# 代码调用这个存储过程的吗?另外,作为旁注:它是 storeD 过程(最后有一个 D) - SQL Server 中的 STORED - 它没有什么可做的做一个“商店”......
  • @marc_s:感谢您注意到这些错别字。存储过程工作正常,现在我删除并重新创建了存储过程,现在它像魅力一样工作......一部分问题已解决,另一部分是我们是否需要将 N 放入 SP,因为我们必须将其放入简单的 SELECT、INSERT和 UPDATE 语句来获得正确的。
  • 我改写他的问题:要显示字符串文字是 unicode,我们在它前面加上 N:N'الحمدلله رب العالمین' 现在我们必须用什么语法来显示 @variable 是 unicode?​​span>

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


【解决方案1】:

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

所以在 T-SQL 中使用类似的语法调用你的 SP

EXEC usp_AddNewPageDetails 'english text', N'arab text', etc.

足够了。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2012-11-15
      相关资源
      最近更新 更多