zoukankan      html  css  js  c++  java
  • TOP字句加SQL变量的相关问题

    SQL Server数据库中的变量可以加载TOP字句之后,下文将对TOP字句加SQL变量的相关问题进行讨论,供您参考,希望对您学习SQL数据库有所帮助。

    SQL Server2005开始,TOP子句后可以跟常量或者变量,跟常量时可省略括号,即top(2)和top 2是等价的(注意不加括号时top和2间的空格),top后使用SQL变量时必须使用括号,例: 
    Sql代码
    declare @num int   
    set @num = 10    
    select top(@num) * from sys.tables  

    declare @num int
    set @num = 10
    select top(@num) * from sys.tables

    使用动态SQL为: 
    Sql代码
    declare @num int   
    set @num = 10    
    declare @str nvarchar(1000)    

    set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'   
    exec(@str)  

    declare @num int
    set @num = 10
    declare @str nvarchar(1000)
    set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'
    exec(@str)

    关于exec的一些备注: 
    1.使用exec命令时,括号中只允许包含一个字符变量,或者一个字符串文本,或者字符串变量与字符串文本的串联。不能在括号中使用函数或CASE表达式,所以最好将代码放在一个变量中,再把此SQL变量作为exec命令的参数 
    2.exec(<string>)不提供接口,因此动态批处理不能访问在调用批处理中定义的局部变量,必须把变量内容串联到字符串中,就像上面的例子一样。上面动态SQL的例子如果写为 Sql代码
    set @str = 'select top('+@num +') * from sys.tables';    
    exec(@str)  

    set @str = 'select top('+@num +') * from sys.tables';
    exec(@str)
    则会报错 
    3.同样的exec也不支持输出参数,如果要把输入放进一个SQL变量,必须先把输入插入一个目标表,然后再从目标表例取值赋给该变量


  • 相关阅读:
    深入解读kubernetes网络基本原理
    Go!Go!Go!设计模式-组合设计模式
    Go!Go!Go!设计模式-创建型模式(简单工厂,工厂方法,抽象工厂)
    Linux内核之磁盘和分区
    Docker容器网络基础
    chart仓库之创建-入库-使用(helm,helm-push,chartmuseum)
    Go语言完整解析Go!Go!Go!(一)数据类型 之 Channel & Goroutine
    k8s爬坑集锦[网络问题]-服务无法访问
    数字证书的原理与应用&爬坑
    ingress的用法与原理
  • 原文地址:https://www.cnblogs.com/kevinGao/p/3702267.html
Copyright © 2011-2022 走看看