标签: nvarchar

如何在CLR UDF中返回nvarchar(max)?

假设以下定义:

/// <summary>
/// Replaces each occurrence of sPattern in sInput with sReplace. This is done 
/// with the CLR: 
/// new RegEx(sPattern, RegexOptions.Multiline).Replace(sInput, sReplace). 
/// The result of the replacement is the return value.
/// </summary>
[SqlFunction(IsDeterministic = true)]
public static  SqlString FRegexReplace(string sInput, string sPattern, 
      string sReplace)
{
    return new Regex(sPattern, RegexOptions.Multiline).Replace(sInput, sReplace);
}
Run Code Online (Sandbox Code Playgroud)

在一个传递nvarchar(max)sInput具有长度> 4000将导致被截断的值(即,在调用此UDF的结果是nvarchar(4000)相对于nvarchar(max).

c# sql-server clr nvarchar

11
推荐指数
1
解决办法
5903
查看次数

Hibernate如何映射SQL数据类型nvarchar(max)?

我的SQL-2005数据库中有一列曾经是varchar(max),但它已被更改为nvarchar(max).

现在我需要更新我的hibernate映射文件以反映更改,这就是以前的情况:

<element type ="text"column ="Value"/>

当我尝试运行该应用程序时,出现以下错误:

org.hibernate.HibernateException:列值为[表]中的列类型错误.找到:ntext,expected:text

我应该在'type'属性中将该列正确映射为nvarchar(max)

我已经尝试将类型设置为ntext,但是hibernate不知道那是什么.我尝试将类型设置为字符串,但它将字符串视为文本类型.

varchar hibernate nvarchar sql-server-2005

11
推荐指数
3
解决办法
3万
查看次数

将nvarchar转换为int以便在视图中连接SQL表

我想创建一个视图,它将显示由不同类型字段连接的两个表的信息.一个字段是nvarchar,另一个是int.我知道我需要在另一种类型中转换一种类型,但不知道该怎么做.任何帮助将不胜感激.

    SELECT dbo.co.co_num, dbo.pck_hdr.weight, dbo.STR_ShipTrack.TrackingNumber 
    FROM dbo.co 
INNER JOIN dbo.pck_hdr ON dbo.co.co_num = dbo.pck_hdr.co_num INNER JOIN dbo.STR_ShipTrack ON dbo.pck_hdr.pack_num = dbo.STR_ShipTrack.Reference1
Run Code Online (Sandbox Code Playgroud)

sql int nvarchar inner-join sql-view

11
推荐指数
1
解决办法
3万
查看次数

Nvarchar和文本在add运算符中不兼容

在SQL Server 2008中,我想@wfID在文本中添加一个变量(),如下所示:

 DECLARE @wfID uniqueidentifier
 SET @wfID = NEWID()

'<META http-equiv="Content-Type" content="text/html; " />  <br><input type="button"
    value="" onclick="window.open(&quot;http://localhost/TestWeb2/Test_Look.aspx?Test_ID='
    + convert(nvarchar, @wfID)
    + '&quot;);" /></br>',
Run Code Online (Sandbox Code Playgroud)

所以,我想添加@wfID到文本,但它总是说

数据类型nvarchar和text在add运算符中不兼容.

我尝试将所有内容转换为nvarchar,但后来我得到了这个:

将表达式转换为数据类型nvarchar的算术溢出错误.

有什么建议?

sql nvarchar guid sql-server-2008

10
推荐指数
1
解决办法
2万
查看次数

Linq to SQL nvarchar问题

我在Linq to SQL中发现了一个巨大的性能问题.

使用字符串从表中进行选择时,传递给sql server的参数始终为nvarchar,即使sql表是varchar也是如此.这导致表扫描而不是搜索,这是一个巨大的性能问题.

var q = (
   from a in tbl
   where a.index == "TEST"
   select a)

var qa = q.ToArray();
Run Code Online (Sandbox Code Playgroud)

该参数作为nvarchar传递,这导致整个索引在使用之前从varchar转换为nvarchar.

如果参数是varchar,那么它是一个非常快速的搜索.

有没有办法覆盖或改变这个?

谢谢关心克雷格.

sql linq indexing nvarchar linq-to-sql

9
推荐指数
1
解决办法
4893
查看次数

确定Nvarchar长度

我已经阅读了所有关于varchar与nvarchar的内容.但我没有看到我认为是一个简单问题的答案.如何确定nvarchar柱的长度?对于varchar,它非常简单:例如,我的描述可以包含100个字符,因此我定义了varchar(100).现在我被告知我们需要国际化和支持任何语言.这是否意味着我需要将Description列更改为nvarchar(200),即只需将长度加倍?(而且我忽略了目前国际化所涉及的所有其他问题.)

这么简单吗?

sql sql-server nvarchar

9
推荐指数
2
解决办法
2万
查看次数

确定nvarchar列中的varchar内容

我有一堆NVARCHAR列,我怀疑在VARCHAR列中包含完全可存储的数据.但是,我不能只是将列的类型更改为VARCHAR并希望最好,我需要进行某种检查.

我想进行转换,因为数据是静态的(将来不会改变)并且列被索引并且与实际(nvarchar)索引相比将受益于更小的(varchar)索引.

如果我只是说

ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200)
Run Code Online (Sandbox Code Playgroud)

那我就不会收到错误或警告.Unicode数据将被截断/丢失.

我该如何检查?

sql t-sql sql-server varchar nvarchar

8
推荐指数
1
解决办法
2665
查看次数

FluentNHibernate和VARCHAR列

我正在使用FluentNhibernate启动一个简单的.NET项目.
我已经按照我在互联网上找到的几个例子,似乎很容易掌握.
我已经意识到如果我让FluentNhibernate构建我的数据库模式(Sql Server 2000),它会为我的字符串模型属性生成NVARCHAR字段.

有人建议我可以添加一个约定来改变类型.

这段代码效果很好:

public class AnsiStringConvention : IPropertyConvention 
        {
            private static Type stringType = typeof(string);
            public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
            {
                if (instance.Property.PropertyType == stringType)
                {
                    instance.CustomType("AnsiString");
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

现在我的数据库字段是VARCHAR,正如我预期的那样.
我需要在我的类中添加一个组件,遵循DDD模式我将Address放在一个单独的类中并将其添加到我的Customer类中.
我为地址创建了一个单独的映射文件:

public class AddressMap : ComponentMap<Address>
{
    public AddressMap()
    {
        Map(x => x.Number);
        Map(x => x.Street)
            .Length(100);
        Map(x => x.City)
            .Length(50);
        Map(x => x.PostCode)
            .Length(5);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的Customer表的所有字段都是VARCHAR,但Address(Street,City和PostCode)组件的字段仍然创建为NVARCHAR.

nhibernate nvarchar conventions fluent-nhibernate

8
推荐指数
1
解决办法
2658
查看次数

SQL Server如何在NVARCHAR(最大)中存储超过4000个字符?

我已经定义了一个具有类型参数的存储过程,NVARCHAR(max)我在我的文件中处理该字符串stored procedure.我知道最大值nvarchar是4000.但是我已经将一个包含5700个字符的字符串传递给了我的sp而没有错误.可能吗?

sql-server stored-procedures nvarchar

8
推荐指数
1
解决办法
1万
查看次数

什么时候 nvarchar(Max) = nvarchar(4000)?

SO 和其他网站上有多个帖子明确指出了最大长度nvarchar(max)为 2GB。然而,我在互联网和现实生活中也看到了很多混乱,它实际上是 Unicode 中的 8000/4000。

我想知道什么事情可以改变这个事实,或者可能导致某人错误地假设这一点。

我已经收集的一些建议/部分答案:

  1. 是否有旧的 SQL Server 版本仅支持最多 4000 个?
  2. 当将nvarchar(max)变量/列分配给非最大尺寸组件的串联时,我们必须将所有内容都nvarchar(max)显式转换吗?下面展示了一个奇怪的示例,其中文本返回函数需要转换,而文字的 N 可以省略:

    declare @s nvarchar(max) 
    select @s = convert(nvarchar(max), replicate('.', 8000)) + N'Hi!'
    select len(@s) -- returns 8003
    
    declare @s nvarchar(max) 
    select @s = replicate('.', 8000) + N'Hi!' 
    select len(@s) -- returns 4000
    
    declare @s nvarchar(max) 
    select @s = convert(nvarchar(max), replicate('.', 8000)) + 'Hi!' 
    select len(@s) -- returns 8003
    
    Run Code Online (Sandbox Code Playgroud)
  3. 有办法禁用该功能吗?与此有sp_tableoption @OptionName=large value types out of row …

t-sql sql-server nvarchar

7
推荐指数
1
解决办法
1万
查看次数