小编gbn*_*gbn的帖子

检查null varbinary(max)列的效率?

使用SQL Server 2008.

示例表:

CREATE table dbo.blobtest
(id int primary key not null,
name nvarchar(200) not null, 
data varbinary(max) null)
Run Code Online (Sandbox Code Playgroud)

示例查询:

select id, name, 
cast((case when data is null then 0 else 1 end) as bit) as DataExists 
from dbo.blobtest 
Run Code Online (Sandbox Code Playgroud)

现在,查询需要返回一个"DataExists"列,如果blob为null,则返回0,否则返回1.

这一切都很好,但我想知道它的效率如何.即,SQL服务器是否需要将整个blob读入其内存,或者是否有一些优化,以便它只进行足够的读取以确定blob是否为空?

(FWIW,对于此示例,sp_tableoption"超出行的大值类型"选项设置为OFF).

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

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

嵌套在Linq中选择顶部1

有一些问题想出这一个.

select*,(从chicken_photo选择top1 chicken_nr,其中鸡=代码顺序为[sort])作为Chicken的照片

代码是Table Chicken中的一列

基本上得到这只鸡的封面照片.

为了更清楚,我希望它从表Chicken返回多行.但只有一个来自chicken_photo的条目.

var q = from chicken in data.chickens
                    join photos in data.chicken_photos
                    on chicken.Code equals photos.chicken                    
                    where chicken.Lang==lang && chicken.photographer_nr == nr
                    group chicken by new     {chicken.photographer,photos.Photograph_Nr,chicken.Title,chicken.Code}              
Run Code Online (Sandbox Code Playgroud)

.net c# sql linq

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

SQL中的转义字符

请原谅我,因为我是一个sql noob.我正在尝试使用以下内容进行插入,但是我对撇号有问题.我有很多要插入的记录,但很多都有同样的问题.有没有逃脱它们的方法?

INSERT INTO  [dbo].[tb_Chefs] ([ChefHotelID], [HotelID], [ChefID],   
     [Position],  [GroupID])  
VALUES(N'b809a86e-f7f2-45b2-a240-0049f51509d7' ,N'14481', N'624', 
     N'Chef d'atelier', N'331')
GO
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

sql string sql-server-2005

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

如何判断SQL Server 2008中创建约束的方法是什么?

有两种方法可以创建约束,

方法A:

ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
Run Code Online (Sandbox Code Playgroud)

方法B:

CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

但是,似乎需要使用依赖于它们的创建方式(Drop约束与drop index)的方法来删除这些约束.有没有办法确定创建约束的方法,而不是尝试方法并查看它是否失败?我知道你可以让SQL Server为你创建一个drop脚本,但我正在寻找某种查询.

sql sql-server constraints sql-server-2008

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

对于价格和价值,使用varchar over decimal是否有任何优势

我和我的朋友争论反对他在varchar中存储价格,价值和其他类似信息的建议.

我的观点是基于

  1. 由于我们需要来回投射,计算将变得困难.
  2. 数据的完整性将丢失.
  3. 索引表现不佳
  4. 排序和聚合函数也需要转换

等等

但他说,在他以前的工作中,每个人都习惯将这些值存储在varchar中,因为DB和APP之间的通信在这种方法中非常有效.(我仍然不能接受这个)

在varchar中存储这些值真的有一些优点吗?

注意:我不是在谈论PhoneNo,ID,邮政编码,SSN等栏目.我知道varchar最适合那些.这些列是基于值的,并且肯定会以某种方式参与计算.

database-design types sql-server-2005

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

SQL Server Right() 函数从列上的某个点删除字符

我正在尝试从“-”字符后的“描述”列中删除文本。我知道我必须使用 Right() 函数,但是循环遍历所有记录并更改 Description 列中的所有记录的语法是什么样的?

例子...

前:

0002    55  Actor Hill - 0002
0004    57  Adair - 0004
0005    74  Adams - 0005
Run Code Online (Sandbox Code Playgroud)

后:

0002    55  Actor Hill 
0004    57  Adair 
0005    74  Adams 
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

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

SQL Server 2005 - 关闭睡眠连接

我似乎在我的Dev服务器上有一个应用程序,它有很多打开的连接(它们应该在那里,但是一些坏的数据层被用来打开它们,忘了关闭它们).我只是希望它们关闭,以便我可以在服务器上运行其他应用程序.如何强制关闭所有连接?

sql-server iis connection sleep

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

SQL随机数不起作用

declare @fieldForceCounter as int
declare @SaleDate as dateTime
declare @RandomNoSeed as decimal

set @fieldForceCounter = 1
set @SaleDate = '1 Jan 2009'
set @RandomNoSeed = 0.0

WHILE @fieldForceCounter <= 3
   BEGIN

    while @SaleDate <= '1 Dec 2009' 
    begin       

        INSERT INTO MonthlySales(FFCode, SaleDate, SaleValue) VALUES(@fieldForceCounter, @SaleDate, RAND(@RandomNoSeed))

        set @saleDate = @saleDate + 1
        set @RandomNoSeed = Rand(@RandomNoSeed) + 1

    end

    set @SaleDate = '1 Jan 2009'
    set @fieldForceCounter = @fieldForceCounter + 1
   END
GO
Run Code Online (Sandbox Code Playgroud)

该 T-SQL 命令应该在“ SaleValue”表的“ MonthlySales”列中插入随机值。 …

sql sql-server random

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

将主键作为标识字段是否合适?

我已经阅读了很多关于我们是否应该将主键作为标识列的文章,但我仍然感到困惑.

使列具有标识的优点在于它可以在连接中提供更好的性能并提供数据一致性.但是有一个与标识相关的主要缺点,即当INSERT语句失败时,IDENTITY值仍会增加如果事务被回滚,则新的IDENTITY列值不会回滚,因此我们最终会在排序方面出现空白.我可以使用GUID(通过使用NEWSEQUENTIALID),但它会降低性能.

sql database-design identity primary-key uniqueidentifier

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

两个日期时间字段之间的SQL Server,无法正常工作

SQL Server 2005:

以下观点

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/01/2011' And '03/31/2011')  
ORDER BY KeyedDate
Run Code Online (Sandbox Code Playgroud)

截止日期为2011年3月2日至2011年3月31日.

如果我将第一个日期更改为03/00/2011

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/00/2011' And '03/31/2011')  
ORDER BY KeyedDate
Run Code Online (Sandbox Code Playgroud)

它现在提供2011年3月1日至2011年3月31日的数据

KeyedTimestamp字段是DateTime,并且有时间与这些记录相关联.2011年3月31日的所有记录都已计算在内.我知道我可以通过在第二个日期之间提供最大时间来实现这一点,所以我不是在寻找替代where子句,而是要理解为什么它忽略了第一个的记录,即使它合并了从31日开始.

它几乎就像它在3月1日23:59:59检查,我希望我可以消除这种检查,我只关心日期,而不是时间

sql-server between

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