分享

SQL2000常用语法 - 怪你过分美丽的日志 - 网易博客

 露初晞 2010-04-25

一,游标的用法

USE pubs

DECLARE tnames_cursor CURSOR

FOR

SELECT state ,au_id

FROM authors

open tnames_cursor

declare @state varchar(50)

declare @au_id varchar(50)

Fetch tnames_cursor into @state,@au_id

while (@@fetch_status=0)

begin

if(@state='CA')

begin

print @au_id

end

FETCH NEXT FROM tnames_cursor INTO @state,@au_id

end

CLOSE tnames_cursor

DEALLOCATE tnames_cursor

二,取时间段

(1),Convert(varchar(11),storeExport.inTime,21) >= '2007-03-13' and Convert(varchar(11),storeExport.inTime,21) <='2007-03-15')

(2),两个日期做减法

DateDiff(interval, date1, date2)

interval 参数的设定值如下:

yyyy 年

q 季

m 月

y 一年的日数

d 日

w 一周的日数

ww 周

h 时

n 分钟

s 秒

例:select DateDiff(d, '2005-5-01','2007-05-01')

 三, 常用语句

1,select * from saleOrder order by rsoid asc    --正排

2,select * from saleOrder order by rsoid desc   --倒排

3,select top 5*  from saleOrder    --取前五行

4,select top 5*  from saleOrder order by rsoId desc   --取后五行

5,select distinct saleOrderCode  from saleOrder    --去掉编号重复的数据 

6,select saleOrderCode from table1

   union all

   select saleOrderCode from table2

   --将两个 SQL 语句的结果合并起来

比如希望返回前三名的比分,但是第三名有并列的,使用:

                       select top 3 * from table order by score

的话就只能返回三条记录,在这样的情况 下,就可以使用:

                      select top 3 with ties * from table order by score

还有,有的时候我不希望出现重复的记录,那么可以使用:

                      select distinct top 3 * from table order by score

四,连接

 交叉联合

  SELECT *

  FROM <table1 CROSS JOIN table2>

  [WHERE <serach condition>]

   自然联合

  SELECT *

  FROM <table1 NATURAL JOIN table2>

  [WHERE <serach condition>]

   

  内联合

  SELECT *

   FROM <table1 INNER JOIN table2>

   [WHERE <serach condition>]

   [ON <serach condition>]

   [USING <column name,...last column name>]

    外联合

   SELECT *

   FROM <table1 FULL OUTER JOIN table2>

   [WHERE <serach condition>]

   [ON <serach condition>]

   [USING <column name,...last column name>]

    

   左 外联合

   SELECT *

   FROM <table1 LEFT OUTER JOIN table2>

   [WHERE <serach condition>]

   [ON <serach condition>]

   [USING <column name,...last column name>]

 

   右外联合

   SELECT *

   FROM <table1 RIGHT OUTER JOIN table2>

   [WHERE <serach condition>]

   [ON <serach condition>]

   [USING <column name,...last column name>] 

如何在存储过程里插完主表返回主表ID:

1,在存储过程里插主表:

ALTER  PROCEDURE [dbo].[UP_saleOrder_ADD]

@rsoId int output,

.......

as

 INSERT INTO saleOrder(

 [rsoCcrid],[rsoSusid],[rsoCode],[rsoTime],[rsoDelivertime],[rsoDeliveraddr],[rsoDiscount],

 [rsoStatus],[rsoArole],[rsoMoney],[rsoDownpay],[PayID],[rsoFinaldiscount],[rsoSdtid],[rsoMemo],

 [rsoType],[rsoSourcecode],[rsoIsinvoice],[rsoFinalPayID],[clientName],[clientTel],[clientCard]

 )VALUES(

 @rsoCcrid,@rsoSusid,dbo.GetContractCode(getdate()),@rsoTime,@rsoDelivertime,@rsoDeliveraddr,@rsoDiscount,

 @rsoStatus,@rsoArole,@rsoMoney,@rsoDownpay,@PayID,@rsoFinaldiscount,@rsoSdtid,@rsoMemo,

 @rsoType,@rsoSourcecode,@rsoIsinvoice,@rsoFinalPayID,@clientName,@clientTel,@clientCard

 )

 SET @rsoId = @@IDENTITY

2,在程序里接收存储过程返回值:

public int Add(QuMeiXJ.Model.saleOrder model)

  {

   SqlParameter[] parameters = {

           new SqlParameter("@rsoId", SqlDbType.Int,4),

            new SqlParameter("@rsoCcrid", SqlDbType.Int,4),

   .................................................................... 略

                                                   };

      parameters[0].Direction = ParameterDirection.Output;

      parameters[1].Value = model.rsoCcrid;

   .................................................................... 略

   DbHelperSQL.RunProcedure("UP_saleOrder_ADD",parameters);

   return (int)parameters[0].Value;

   }

3,case的 使用:

例1

SELECT ShipVia, CASE ShipVia WHEN 1 THEN 'A.Datum'    WHEN 2 THEN 'Contoso'    WHEN 3 THEN 'Consolidated Messenger'  ELSE 'Unknown' ENDFROM Orders

例2

select saleOrderProductPack.IsStock,

case saleOrderProductPack.IsStock when 0 then saleOrderProduct.IsStock

else saleOrderProductPack.IsStock end from saleOrderProductpack

inner join saleOrderProduct on saleOrderProductPack.saleOrderProductID=saleOrderProduct.ID

4,SubString 截取字符串

例1:截取BJPX0711260155-1单号"-"以后的部分

select substring(BJPX0711260155-1,CHARINDEX('-', BJPX0711260155-1)+1,len(BJPX0711260155-1)-CHARINDEX('-',BJPX0711260155-1))

例2:字段RetailContractNumber=1,2,3,4,查询显示时去掉最 后一个逗号:

SELECT substring(RetailContractNumber,1,len(RetailContractNumber)-1 from table

5,存储过程里拼串变量赋值

declare @str nvarchar(4000) --变量类型,大小必须如此定义

declare @Cou int

declare @SaleOrderCode varchar(30)

select @str=N'select @Cou=count(*) from OperEncasement where EncasementCode like ''%'+cast(@SaleOrderCode as varchar(30))+'%'''

exec sp_executesql @str, N'@Cou int output',@Cou output

print @Cou

6,存储过程里执行存储过程取它的返回值:

declare @ECount int

set @ECount = 0

EXECUTE UP_OperStockApplySplit3 @stockApplyDetailID , @Count = @ECount OUTPUT     //@Count是另一个存储过程的返回值

if(@ECount > 0 )

begin

 SET @result = 3

 GOTO ERROR

end

7,替换查询结果部分内容(把<br>替换为---):

select replace(cast(productMaterial as varchar(8000)),'<br>','---') from buyOrderproduct

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多