标签: nvarchar

NVarchar(MAX)用于短字符串

我感兴趣的是NVarchar(MAX)一个好的数据类型是我想存储长度为1-50个字符的短unicode字符串,但是大多数(超过90%)长5-10个字符?

该列不会用于比较和排序查询.它可能会作为包含列添加到索引中.预计行数 - 超过10M.

有什么建议?先感谢您!

sql database nvarchar

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

从sql server迁移到Oracle varchar长度问题

我正面临着一个奇怪的问题,试图从sql server迁移到oracle.在我的一个表中,我有一个列定义NVARCHAR(255) 后,我读了一下,我知道SQL服务器在oracle count字节时计算字符.所以我在oracle中将我的表定义为VARCHAR(510)255*2 = 510但是当使用sqlldr从制表符分隔文本文件加载数据时,我得到错误,表明某些条目已经超出了此列的长度.在使用以下命令检入sql server之后:

SELECT MAX(DATALENGTH(column))
FROM table
Run Code Online (Sandbox Code Playgroud)

我得到的最大数据长度是510.

我确实使用了Hebrew_CI_AS collat​​iong,即使我不认为它会改变任何东西....我在SQL Server中检查过,如果任何条目包含TAB但没有...所以我猜它不是一个损坏的数据....任何人都有一个主意?

编辑 进一步检查后,我注意到问题是由于数据文件(除了@Justin Cave post解决的问题).

我已将行分隔符更改为"^",因为我的数据都不包含此字符和"| ^ |" 作为列分隔符.

创建控制文件如下:

load data
infile data.txt "str '^'"
badfile "data_BAD.txt"
discardfile "data_DSC.txt"
into table table
FIELDS TERMINATED BY '|^|' TRAILING NULLCOLS
(
     col1,
     col2,
     col3,
     col4,
     col5,
     col6
)
Run Code Online (Sandbox Code Playgroud)

问题是我的数据包含<CR>和sqlldr期望在那里的流文件失败<CR>!!!! 我不想更改数据,因为它是一个文本数据(例子的错误消息).

sql-server migration oracle varchar nvarchar

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

sql server表中的最大nvarchar(max)列数

SQL Server 2008 R2中定义Nvarchar(max)列的限制是什么?

我看到了这个链接

但是,我希望在一个表中获得nvarchar(max)列的限制数量.

sql-server nvarchar

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

使用T-SQL计算'nvarchar'字符串的SHA1哈希值

我正在尝试SHA1使用T-SQL 计算unicode字符串的哈希值.以下代码适用于ASCII字符串:

declare @input varchar(50)
set @input = 'some text'
print 'SHA1 Hash: ' + UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0))
Run Code Online (Sandbox Code Playgroud)

但是当我用第一行代码替换时,它会计算错误的哈希值declare @input nvarchar(50).

Calculated hash (nvarchar): BBA91B680CE2685E9465DE24967E425CF055B10F
Calculated hash by a tool : 37AA63C77398D954473262E1A0057C1E632EDA77
Run Code Online (Sandbox Code Playgroud)

如何计算a的SHA1哈希值nvarchar

[编辑]:

下面的C#代码生成与我用于散列的工具相同的散列:

// Computes SHA1 hash of a given string
string ComputeHash(string input)
{
    string result = string.Empty;
    byte[] hash;
    byte[] bytes = Encoding.GetBytes(input);

    using (var sha = SHA1Managed.Create())
        hash = sha.ComputeHash(bytes);

    foreach (var b …
Run Code Online (Sandbox Code Playgroud)

t-sql hash nvarchar

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

NVARCHAR 的奇怪异常

这给出了一个例外:'NVARCHAR' 不是公认的内置函数名称。

DECLARE @BatchIds TABLE
    (
      BatchId AS UNIQUEIDENTIFIER ,
      UserLogonId AS NVARCHAR(80) ,
      ReportStatus NVARCHAR(100) ,
      Created DATETIME ,
      RunTimeInMins AS INT ,
      ReportName NVARCHAR(200)
    )
Run Code Online (Sandbox Code Playgroud)

当我删除 NVARCHAR 的“AS”时,它不会给出任何异常。

DECLARE @BatchIds TABLE
    (
      BatchId AS UNIQUEIDENTIFIER ,
      UserLogonId NVARCHAR(80) ,
      ReportStatus NVARCHAR(100) ,
      Created DATETIME ,
      RunTimeInMins AS INT ,
      ReportName NVARCHAR(200)
    )
Run Code Online (Sandbox Code Playgroud)

关于为什么的任何建议?

更新:

请注意,我的问题更多地是针对为什么 AS 在这种情况下在幕后的工作方式不同,而不是试图解决工作情况。对于那些无法使第二个示例工作的人,请尝试此操作。这为我提供了与Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)相同的数据和 SQL Server 版本。

DECLARE @BatchIds TABLE
    (
      UserLogonId NVARCHAR(80) , …
Run Code Online (Sandbox Code Playgroud)

sql-server nvarchar

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

在存储过程中由IN运算符导致的数据类型nvarchar转换为bigint时出错

存储过程:

ALTER PROCEDURE [dbo].[MyProcedure]
    @CommaSeperatedValues nvarchar(500)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (@CommaSeperatedValues) 
Run Code Online (Sandbox Code Playgroud)

来自Code的值是字符串值:"9010073,9010074"

我尝试像这样运行SP:exec MyProcedure'9010073,9010074'

这是在运行SP时出现错误'错误将数据类型nvarchar转换为bigint'

如果我单独运行select查询,如下所示:

SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (9010073,9010074)
Run Code Online (Sandbox Code Playgroud)

然后我得到了预期的结果.

但我想从SP运行.

sql-server stored-procedures nvarchar in-operator

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

从 varchar 转换为 nvarchar 是否存在数据丢失

我在 SQL Server 中有一个列是varchar(MAX). 该列已填充​​该数据类型。我现在想将列转换为nvarchar(MAX)为接受 unicode 字符。

是否有任何数据丢失,当我从转换此列varchar(MAX)nvachhar(MAX)

sql-server encoding varchar nvarchar

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

在循环中读取 Sql 服务器中的逗号分隔字符串

我有这样的 nvarchar 数据:

'20030,20031,20033,20034,20065,20045,20044'

我想通过拆分成数组来读取所有这些,或者在拆分过程中逐一读取并进行进一步的处理。

我已经尝试过这篇好文章,但无法做到。

sql-server split nvarchar

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

插入中文字母的SQL命令

我有一个包含 nvarchar 类型列的数据库。如果我写

INSERT INTO table VALUES ("??") 
Run Code Online (Sandbox Code Playgroud)

它显示¿¿在表中。我该怎么办?

我正在使用 SQL Developer。

unicode nvarchar oracle-sqldeveloper

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

NVARCHAR(MAX) 是否比 NVARCHAR(N) 消耗更多存储空间(物理大小)

在 SQL Server 中,如果您创建类型为 的列NVARCHAR(MAX),并且仅在其中填充 128 个字符 - 它是否会比您创建它时消耗更多的存储空间NVARCHAR(128)- 或者它的大小相同?

t-sql database sql-server size nvarchar

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