相关疑难解决方法(0)

SQL Server中的char,nchar,varchar和nvarchar有什么区别?

是什么意思nvarchar

是什么区别char,nchar,varchar,和nvarchar在SQL Server?

sql-server varchar

598
推荐指数
10
解决办法
56万
查看次数

T-SQL语句中前缀N的含义是什么?

我在一些插入T-SQL查询中看到了前缀N. 许多人N在将值插入表中之前已经使用过.

我搜索过,但是我无法理解N在将任何字符串插入表格之前包括之前的目的是什么.

 INSERT INTO Personnel.Employees
 VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

varchar和nvarchar SQL Server数据类型之间的主要性能差异是什么?

我正在我的学校使用一个小型网络应用程序的数据库SQL Server 2005.
我在varcharvs 的问题上看到了几个思想流派nvarchar:

  1. 使用varchar除非你处理了很多国际化的数据,然后使用nvarchar.
  2. 只是nvarchar用于一切.

我开始看到视图2的优点.我知道nvarchar确实占用了两倍的空间,但这不一定是一个大问题,因为这只是为几百名学生存储数据.对我而言,似乎最简单的是不要担心它并且只允许一切使用nvarchar.还是有什么我想念的?

sql-server storage varchar nvarchar sql-server-2005

232
推荐指数
10
解决办法
16万
查看次数

如何在C#中创建NVarchar(max)Sql参数?

我有以下代码使用存储过程拉回DataTable并输入字符串参数@JobNumbers,这是动态创建的作业编号字符串(因此长度未知):

using (SqlConnection connection = new SqlConnection(con))
        {
            SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
            cmd.Parameters["@JobNumbers"].Value = JobNumber;

            SqlDataAdapter da = new SqlDataAdapter(cmd);

            connection.Open();
            da.Fill(JobDetails);
        }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我当前将JobNumber参数设置为4000的长度,这应该足以承担大约500个作业号并且应该足够了.但是,有可能在奇怪的场合需要更多.所以,我想知道,有没有办法将参数设置为nvarchar(max)的等效sql参数类型?

我已经看过各种类似的问题(将参数传递给SQLCommand的最佳方法是什么?)但没有具体说明你是否可以(或不能)这样做.其次,如果我将存储过程中的@JobNumber参数设置为nvarchar(max),甚至需要这样做,因此我可能根本不需要在C#中设置长度?如果我这样做,这将有潜在的性能问题,如此问题中所建议的在添加SqlCommand参数时何时应该使用"SqlDbType"和"size"?

c# sql nvarchar sqlparameter

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

TSQL md5哈希与C#.NET md5不同

我生成了一个md5哈希,如下所示:

DECLARE @varchar varchar(400) 

SET @varchar = 'è'

SELECT CONVERT(VARCHAR(2000), HASHBYTES( 'MD5', @varchar ), 2)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

785D512BE4316D578E6650613B45E934
Run Code Online (Sandbox Code Playgroud)

但是使用以下方法生成MD5哈希:

System.Text.Encoding.UTF8.GetBytes("è")
Run Code Online (Sandbox Code Playgroud)

产生:

0a35e149dbbb2d10d744bf675c7744b1
Run Code Online (Sandbox Code Playgroud)

C#.NET方法中的编码设置为UTF8,我假设varchar也是UTF8,任何关于我做错的想法?

.net t-sql sql-server unicode encoding

16
推荐指数
1
解决办法
8617
查看次数

pandas to_sql所有列为nvarchar

我有一个动态创建的pandas数据框,其列名不同.我想他们推到SQL,但不希望他们去了MSSQLServer的默认数据类型"文本"(任何人都可以解释为什么这是默认?那岂不是有意义的使用更常见的数据类型? )

有谁知道如何为所有列指定数据类型?

column_errors.to_sql('load_errors',push_conn, if_exists = 'append', index = False, dtype = #Data type for all columns#)
Run Code Online (Sandbox Code Playgroud)

dtype参数采用dict,因为我不知道列是什么,所以很难将它们全部设置为'sqlalchemy.types.NVARCHAR'

这就是我想做的事情:

column_errors.to_sql('load_errors',push_conn, if_exists = 'append', index = False, dtype = 'sqlalchemy.types.NVARCHAR')
Run Code Online (Sandbox Code Playgroud)

任何帮助/理解如何最好地指定所有列类型将不胜感激!

python sqlalchemy pandas

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

SQL Server上的NVarchar存储与Varchar存储

我刚刚收到一位同事的通知,如果你为数据库中的VARCHAR字段分配一个长度,例如VARCHAR(1000),那么数据库将强制数据库为每一行保留1000个字节的空间,无论它是否是需要.

然而,他声称NVARCHAR(1000)字段将只保留所需的字节数.

我已经在这里和网络上尽可能地研究了这个,但是我找不到任何支持它的东西,SQL Server帮助文档也没有提到我能找到的任何地方.

sql-server

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

如何通过T-SQL在SQL Server 2008中创建预定作业?

我想创建一个作业,在经过一段时间后从数据库中删除记录.例如,我在新闻表中有一个字段,Time Stamp每个月SQL查询就像我的数据库中的预定作业一样运行,并删除时间戳为两个月的新闻.一般来说,我想删除2个月前和更早的新闻,不要让我的桌子成为一张大桌子.我怎么能做到这一点?

sql t-sql jobs schedule

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

无法重命名临时表的列

我创建了一个这样的全局临时表 -

CREATE TABLE ##BigTable
(Nos varchar(10) null)
Run Code Online (Sandbox Code Playgroud)

然后尝试重命名Nos列,如下所示 -

EXEC sp_RENAME '##BigTable.Nos' , 'Numbers', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)

我收到了错误 -

Either the parameter @objname is ambiguous or the 
claimed @objtype (COLUMN) is wrong.
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决这个问题呢?



EXTRA与问题不完全相关的东西,但供参考.

我想添加这个 - 我尝试使用像这样的完全限定名称创建全局临时表 -

CREATE TABLE [NotMyTempDataBase].[dbo].[##BigTable]
(Nos varchar(10) null)
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用 - 重命名它 -

EXEC tempdb.sys.sp_rename N'[NotMyTempDataBase].[dbo].[##BigTable].Nos', 
N'Numbers', N'COLUMN';
Run Code Online (Sandbox Code Playgroud)

错误 -限定的@oldname引用当前数据库以外的数据库.

这是错的.我意识到临时表是在系统数据库tempdb中创建的,即使您在创建它时指定了另一个DB名称.

改用它 -

CREATE TABLE [tempdb].[dbo].[##BigTable]
(Nos varchar(10) null)
Run Code Online (Sandbox Code Playgroud)

--SQL服务器消息:忽略数据库名称'tempdb',引用tempdb中的对象.

EXEC tempdb.sys.sp_rename N'[tempdb].[dbo].[##BigTable].Nos', 
N'Numbers', N'COLUMN';
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-server-2008

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

Sql表中的Unicode字符

我正在使用Sql Server 2008 R2 Enterprise.我正在编写一个能够插入,更新,删除和从Sql表中选择记录的应用程序.当涉及到包含特殊字符(如ć,čš,đ和ž)的记录时,应用程序会出错.

这是发生的事情:

命令:

INSERT INTO Account (Name, Person) 
VALUES ('Boris Borenovi?', 'True') 
WHERE Id = '1'
Run Code Online (Sandbox Code Playgroud)

插入一个新记录,但名称字段是Boris Borenovic,所以字符?更改为c.

命令:

SELECT * FROM Account 
WHERE Name = 'Boris Borenovi?'
Run Code Online (Sandbox Code Playgroud)

返回正确的记录,所以再次?替换字符c并返回记录.

问题:

  1. 是否可以使Sql Server保存前面提到的?其他特殊字符
  2. 如果前面的问题得到解决,是否仍然可以使Sql能够返回Boris Borenovi?记录,即使查询要求Boris Borenovic

因此,在保存记录时,我希望Sql能够准确地保存所给出的内容,但是在检索记录时,我希望它能够使用特殊字符.谢谢你的帮助.

sql sql-server

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