zoukankan      html  css  js  c++  java
  • T-SQL基础--chp10可编程对象学习笔记[下]

    --2014年9月29日9:15:29
    --P338
    --两种执行动态SQL的方法
    --EXEC命令
    DECLARE @sql AS VARCHAR(100);
    SET @sql = 'PRINT ''This message was printed by a dynamic SQL batch'';';--注意,对于字符串中的字符串,需要用两个单引号(不是双引号!)来代表一个单引号
    EXEC(@sql);
    --sp_executesql存储过程[两个输入参数和一个参数赋值部分]
    DECLARE @sql AS NVARCHAR(100);
    
    SET @sql = N'SELECT orderid,custid,empid,orderdate 
    FROM Sales.Orders
    WHERE orderid = @orderid';
    
    EXEC sp_executesql
      @stmt = @sql, --该参数中需要包含想要运行的批处理代码的Unicode字符串
      @params = N'@orderid AS INT', --该参数是一个unicode,该参数包含@stmt中所有输入和输出参数的声明
      @orderid = 10248;--为输入和输出参数指定
      
    --在PIVOT中使用动态SQL P343 暂略
    
    --例程是为了计算结果或执行任务而对代码进行封装的一种编程对象
    
    --例程1:用户自定义函数 标量UDF(返回单个数据值)+表值UDF(返回一个表)
    --表值UDF只能在查询的FROM子句中出现
    USE TSQLFundamentals2008;
    IF OBJECT_ID('dbo.fn_age') IS NOT NULL 
      DROP FUNCTION dbo.fn_age;
    GO
    
    CREATE FUNCTION dbo.fn_age
    (
      @birthdate AS DATETIME,
      @eventdate AS DATETIME
    )
    RETURNS INT
    AS
    BEGIN
      RETURN 
      DATEDIFF(year,@birthdate,@eventdate)
       - CASE WHEN 100 * MONTH(@eventdate) + DAY(@eventdate)
               < 100 * MONTH(@birthdate) + DAY(@birthdate)
            THEN 1 ELSE 0
        END
    END
    GO
    
    SELECT 
      empid, firstname, lastname, birthdate,
      dbo.fn_age(birthdate,CURRENT_TIMESTAMP) AS age
    FROM HR.Employees;
    
    --存储过程(略)
    
    --触发器[一种特殊的存储过程,不能被显式执行,必须依赖于一个事件的过程]
    
    --错误处理
    --TRY CATCH
    
    第10章 完
  • 相关阅读:
    10A:子串计算
    09I:鸡蛋的硬度
    09H:数字组合
    09G:登山
    09F:股票买卖
    09E-计算字符串距离
    09D-最大上升子序列和
    09C-全排列
    02C-垃圾炸弹
    【c#基础】vs2019设置高级选项
  • 原文地址:https://www.cnblogs.com/lanjin/p/4000062.html
Copyright © 2011-2022 走看看