select * from [Table1] where [ID] = 10
select * from [Table1] where [ID] = '10'
------------------
這個當然上面的好了,下面的要轉換成int

解决方案 »

  1.   

    select count(1) from Table1 where [ID] = 1001
    select count([ID]) from Table1 where [ID] = 1001
    ----------------------------------------------------
    這2者不同,前者類似於count(*),後者會將null去掉.
    至於count(1)和count(*),如果有索引,count(*)會優先用到,所以2者各有好處
      

  2.   

    select 1 where exists (select [ID] from Table1 where [ID]=1001)
    select [ID] from Table1 where [ID] = 1001
    select top 1 [ID] from Table1 where [ID] = 1001
    -----------------------------------
    這3句也是不一樣的.
    所以,不怎麼好比啊
      

  3.   

    SQL隱藏的轉換,一般是低的往高的轉,比如smallint與int比,SQL就會先將smallint轉成int,再比.附online book上的類型等級
    ------------------------------
    sql_variant (最高)
    datetime
    smalldatetime
    float
    real
    decimal
    money
    smallmoney
    bigint
    int
    smallint
    tinyint
    bit
    ntext
    text
    image
    timestamp
    uniqueidentifier
    nvarchar
    nchar
    varchar
    char
    varbinary
    binary (最低)
      

  4.   

    select * from [Table1] where [ID] = 10
    select * from [Table1] where [ID] = '10'
    ------------------
    這個當然上面的好了,下面的要轉換成int
    ---------------------------------------
    string sql = "select * from [Table1] where [ID] = 10";
    你是指不加引号,在数据库分析执行时可以直接认为是int,而加了引号会先转为字符串再格式化成int?如果有而外消耗,大概有多少?字符串到特定类型的格式化过程消耗?
    相比 在程序中做反射得到有引号或无引号的字符串的消耗哪个会更大些?
      

  5.   

    to playwarcraft:
    insert或update 时,加了引号后也按“Sql的隐藏转换”规则往上转换么?
    按你说的: 
    我们传给数据库服务器的是一条字符串型的Sql命令,在服务器分析时 加了引号的值和没加引号的值 会存在如下转换过程:
    无引号的值 ----> 转换成 变量类型
    有引号的值 ----> 转换成 字符串 ----> 隐藏的转换 变量类型
    是这样么?
      

  6.   

    下面两条语句有什么区别?执行效率上呢(会不会有额外的消耗)?
    select * from [Table1] where [ID] = 10
    select * from [Table1] where [ID] = '10'
    ---------------------
    一样,可以看执行计划
      

  7.   


    如果ID唯一,不要加top 1,top 1比较影响性能,有top就会做一次sort. 如果id是主键,即使有top 1 也没有关系。有count 肯定慢的,要先进行group by,如果ID重复记录非常多,感觉用exists 就应该会快点
      

  8.   

    下面两条语句有什么区别?执行效率上呢(会不会有额外的消耗)?
    select * from [Table1] where [ID] = 10
    select * from [Table1] where [ID] = '10'
    ---------------------
    一样,可以看执行计划
    ---------------------------------------
    以前还真没注意在执行计划里能看到类型转换~测试了几种类型,暂时得出一个结论:
    select 时:给值加上引号和不加基本一致,而给decimal类型的字段付值可以看出,应该是Sql查询分析器在分析之前先将值转换了一下,加了引号的decimal值,会把多余精度的小数位抛弃,而不加引号的则会直接放在等号后;
    update 时:此时可以看出无论是否加了引号都是用Convert()函数格式化的~所以个人认为分析器将所有值都视为字符串统一转换,所以得出的结论是加不加引号都会被认为是字符串,然后用Convert()转换成字段类型;
      

  9.   

    如果ID唯一,不要加top 1,top 1比较影响性能,有top就会做一次sort. 如果id是主键,即使有top 1 也没有关系。有count 肯定慢的,要先进行group by,如果ID重复记录非常多,感觉用exists 就应该会快点
    ------------------汗…… 从网上看到有人说加个 top 1 比较快~ 所以也就列出来了。。
    在存储过程里判断一般都用exists,所以也想了一条用exists的~
    而之前在往上看到的~平时接触到的基本都是select count(*)~ 
    所以比较想知道这些语句之间的区别,在检索同样的索引列的情况下我想知道是select count比较快还是select [Index]比较快,还有就是select [Index]返回一行比较快还是exists比较快……