标签: sql-server

为什么在SQL Server中使用游标被认为是不好的做法?

我在SQL 7天后就知道了一些性能原因,但SQL Server 2005中是否仍然存在相同的问题?如果我在存储过程中有一个我想单独操作的结果集,那么游标仍然是一个糟糕的选择吗?如果是这样,为什么?

sql-server sql-server-2005 cursor

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

SQL Server的默认端口

我需要知道以下服务的默认端口设置

  1. SQL Server
  2. SQL浏览器
  3. SQL报告服务
  4. SQL Analysis服务

我需要知道不同版本的SQL Server(2000,2005,2008)的这些服务的端口设置

另请告诉我默认端口设置是否会根据sql server版本更改

提前致谢.

sql sql-server asp.net

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

SQLException:字符串或二进制数据将被截断

我有一个C#代码,批量处理很多插入语句.在执行这些语句时,我得到"字符串或二进制数据将被截断"错误和事务roledback.

要找出导致这种情况的insert语句,我需要在SQLServer中逐个插入,直到我遇到错误.

有没有聪明的方法来查找哪个语句和哪个字段使用异常处理导致此问题?(SQLEXCEPTION)

c# sql sql-server

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

如何比较SQL Server中的时间?

我正在尝试比较SQL查询中的日期时间字段中的时间,但我不知道它是否正确.我不想比较日期部分,只是时间部分.

我这样做:

SELECT timeEvent 
FROM tbEvents 
WHERE convert(datetime, startHour, 8) >= convert(datetime, @startHour, 8)
Run Code Online (Sandbox Code Playgroud)

这是对的吗?

我问这个是因为我需要知道是否08:00:00小于或大于07:30:00,我不想比较日期,只是时间部分.

谢谢!

sql sql-server datetime

58
推荐指数
5
解决办法
15万
查看次数

按日期排序显示NULLS首先是最近的日期

我有一个执行select语句的存储过程.我希望我的结果按日期字段排序,并显示所有记录首先是NULL日期,然后是最近的日期.

声明如下:

SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC
Run Code Online (Sandbox Code Playgroud)

现在,这将首先显示所有具有NULL提交日期的记录,但是当我到达具有日期值的行时,它们不是视图中的最新日期.

如果我用DESC替换ASC,那么我按照我想要的顺序获取日期,但NULL值位于我的结果集的底部.

有没有办法构建我的查询,以便我可以在顶部显示空值,然后当有日期值时,为了命令它们从最近的下降到最早?

sql-server sql-server-2000

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

如何从查询中返回SQL数据类型?

我有一个SQL查询,它查询我不需要也不想理解的巨大数据库(如数百个具有难以读取的名称的表,如CMM-CPP-FAP-ADD)数据库.此查询的结果需要存储在临时表中以提供报告.

我需要创建临时表,但是要查看数百个视图/表以查找此处表示的数据类型,我不得不怀疑是否有更好的方法来构造此表.

任何人都可以建议我如何使用任何SQL Server 2008工具来划分我的SQL 2000数据库中的源数据类型?

作为一般示例,我想通过以下查询来了解:

SELECT Auth_First_Name, Auth_Last_Name, Auth_Favorite_Number 
FROM Authors
Run Code Online (Sandbox Code Playgroud)

而不是实际的结果,我想知道:

Auth_First_Name is char(25)
Auth_Last_Name is char(50)
Auth_Favorite_Number is int
Run Code Online (Sandbox Code Playgroud)

我对约束不感兴趣,我真的只想知道数据类型.

sql t-sql sql-server sql-server-2008

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

SQL Server中的"WITH SCHEMABINDING"的缺点是什么?

我有一个包含数百个笨拙命名表的数据库(CG001T,GH066L等),我对每个人都有"友好"名称的观点(例如,"CUSTOMERS"视图是"SELECT*FROM GG120T") .我想在我的视图中添加"WITH SCHEMABINDING",以便我可以获得与之相关的一些优点,例如能够索引视图,因为少数视图已经计算了动态计算成本昂贵的列.

SCHEMABINDING这些观点是否存在缺点?我发现一些文章含糊地暗示了缺点,但从未详细介绍过它们.我知道一旦视图是模式绑定的,你就不能在没有先删除视图的情况下改变任何会影响视图的内容(例如,列数据类型或排序规则),所以这是一个,但除此之外?似乎索引视图本身的能力远远超过了更仔细地规划模式修改的缺点.

sql sql-server query-optimization schemabinding

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

如何在t#中将t-sql的"tinyint"转换为整数?

tinyint在数据库中有一个列,我希望将其转换Int32SqlDataReader.

我该怎么做呢?

编辑#1

我最近不得不这样做.

int a = dataReader.GetByte(dr.GetOrdinal("ColumnName"));
Run Code Online (Sandbox Code Playgroud)

#In除了答案

SQL Server数据类型映射

bigint           - GetInt64  
binary           - GetBytes  
int              - GetInt32  
money            - GetDecimal  
rowversion       - GetBytes  
smallint         - GetInt16  
tinyint          - GetByte  
uniqueidentifier - GetGuid   
...
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请访问 - SQL Server数据类型映射

c# sql-server

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

如何判断是否正在访问数据库表?想要像"SELECT触发器"这样的东西

我有一个包含数百个表的非常大的数据库,经过许多产品升级后,我确信其中一半不再使用了.如何判断是否正在从中选择一个表?我不能只使用Profiler - 我不仅要观看超过几天,而且还有数千个存储过程,并且探查器不会将SP调用转换为表访问调用.

我唯一能想到的是在感兴趣的表上创建聚簇索引,然后监视sys.dm_db_index_usage_stats聚类索引是否有任何搜索或扫描,这意味着表中的数据已加载.但是,在每个表上添加聚簇索引是一个坏主意(由于许多原因),因为这是不可行的.

我还有其他选择吗?我一直想要一个像"SELECT触发器"这样的功能,但是可能还有其他原因导致SQL Server没有这个功能.

解:

谢谢,Remus,指出我正确的方向.使用这些列,我创建了以下SELECT,它完全符合我的要求.

  WITH LastActivity (ObjectID, LastAction) AS 
  (
       SELECT object_id AS TableName,
              last_user_seek as LastAction
         FROM sys.dm_db_index_usage_stats u
        WHERE database_id = db_id(db_name())
        UNION 
       SELECT object_id AS TableName,
              last_user_scan as LastAction
         FROM sys.dm_db_index_usage_stats u
        WHERE database_id = db_id(db_name())
        UNION
       SELECT object_id AS TableName,
              last_user_lookup as LastAction
         FROM sys.dm_db_index_usage_stats u
        WHERE database_id = db_id(db_name())
  )
  SELECT OBJECT_NAME(so.object_id) AS TableName,
         MAX(la.LastAction) as LastSelect
    FROM sys.objects so
    LEFT
    JOIN LastActivity la
      on so.object_id = la.ObjectID
   WHERE …
Run Code Online (Sandbox Code Playgroud)

sql-server database-design clustered-index sql-server-2008

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

在SQL Server上使用不同的排序规则在两个数据库之间进行连接并获取错误

我知道,我知道我在问题中写的内容我不应该感到惊讶.但我的情况是继续在继承的POS系统上工作,我的前任显然不知道JOIN,所以当我查看其中一个加载60秒的内部页面时,我发现它很快,将这8个查询重写为一个查询JOINs情况.问题是,除了不了解JOIN之外,他似乎也对多个数据库感到惊讶并且惊讶,他们使用不同的排序规则.事实上,我们使用所有"正常"的拉丁字符,说英语的人会考虑整个字母表,这整个事情将在几个月内不再使用,所以我只需要一个bandaid.

简而言之,我需要某种方法来转换为单个排序规则,因此我可以比较两个数据库中的两个字段.

确切的错误是:

无法在等于操作中解决"SQL_Latin1_General_CP850_CI_AI"和"SQL_Latin1_General_CP1_CI_AS"之间的排序规则冲突.

t-sql sql-server collation

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