【问题标题】:N' INSERT INTO vs INSERT INTON' INSERT INTO 与 INSERT INTO
【发布时间】:2014-05-13 14:59:02
【问题描述】:

我正在使用 .Net 的自定义库来访问 sql 服务器。

这个库正在服务器中执行这个查询:

exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2) 
   VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)', 
   @const795=1803496, @const796='ÄÅÉæÆôöòÇ Münchenß дие Таль'

结果:

Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß ??? ????

如果我手动执行这个查询:

INSERT INTO Testable (testcolumn1, testcolumn2) 
VALUES (1803496,N'ÄÅÉæÆôöòÇ Münchenß дие Таль')

结果:

Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß дие Таль

N'INSERT INTO 不应该将参数存储在Unicode编码中吗?为什么第二个查询保存“дие Таль”好而第一个查询不保存?

第 2 列是 nvarchar 类型,列的排序规则是 Latin1_General_CI_AS。

另一方面,我还有另一个问题,因为库确实在发送:

exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
  VALUES (@const795, @const796) ',N'@const795 int,@const796 nvarchar(50)',
  @const795=1803496, @const796= 'ÄÅÉæÆôöòÇ Münchenß ??? ????'

用问号代替俄语字符。我知道这是因为我使用 SQL 分析器“嗅探”来自库的查询。

从库中调试查询我可以看到这个“дие Таль”字符的正确值,直到将查询发送到数据库。但是 sql profiler 得到“??? ??????”人物·为什么会这样?

【问题讨论】:

    标签: sql-server unicode character insert-into


    【解决方案1】:

    当您将@const796 设置为一个值时,库需要指定“N”。 @const796=N'ÄÅÉæÆôöòÇ Münchenß дие Таль'

     exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2) 
        VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)', 
        @const795=1803496, @const796=N'ÄÅÉæÆôöòÇ Münchenß дие Таль'
    

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 2010-10-26
      • 2012-07-06
      • 2023-02-09
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2014-03-22
      相关资源
      最近更新 更多