我感兴趣的是NVarchar(MAX)一个好的数据类型是我想存储长度为1-50个字符的短unicode字符串,但是大多数(超过90%)长5-10个字符?
该列不会用于比较和排序查询.它可能会作为包含列添加到索引中.预计行数 - 超过10M.
有什么建议?先感谢您!
我正面临着一个奇怪的问题,试图从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 collationg,即使我不认为它会改变任何东西....我在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>!!!! 我不想更改数据,因为它是一个文本数据(例子的错误消息).
我正在尝试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) 这给出了一个例外:'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) 存储过程:
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 中有一个列是varchar(MAX). 该列已填充该数据类型。我现在想将列转换为nvarchar(MAX)为接受 unicode 字符。
是否有任何数据丢失,当我从转换此列varchar(MAX)来nvachhar(MAX)?
我有这样的 nvarchar 数据:
'20030,20031,20033,20034,20065,20045,20044'
我想通过拆分成数组来读取所有这些,或者在拆分过程中逐一读取并进行进一步的处理。
我已经尝试过这篇好文章,但无法做到。
我有一个包含 nvarchar 类型列的数据库。如果我写
INSERT INTO table VALUES ("??")
Run Code Online (Sandbox Code Playgroud)
它显示¿¿在表中。我该怎么办?
我正在使用 SQL Developer。
在 SQL Server 中,如果您创建类型为 的列NVARCHAR(MAX),并且仅在其中填充 128 个字符 - 它是否会比您创建它时消耗更多的存储空间NVARCHAR(128)- 或者它的大小相同?