来源:https://www.cnblogs.com/guohu/p/11142991.html

1 :普通SQL语句可以用exec执行

Select * from tableName
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL

declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格

当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名

declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错

declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- 成功
exec sp_executesql @s -- 此句正确

3. 输出参数
declare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)

--如何将exec执行结果放入变量中?

declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num

1 :普通SQL语句可以用Exec执行      例:      Select * from tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL

错误:       declare @fname varchar(20)
                set @fname = 'FiledName'
                Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
    正确:      Exec('select ' + @fname + ' from tableName')     -- 请注意加号前后的单引号的边上加空格

当然将字符串改成变量的形式也可
                declare @fname varchar(20)
                set @fname = 'FiledName' --设置字段名

declare @s varchar(1000)
                set @s = 'select ' + @fname + ' from tableName'
                Exec(@s)                -- 成功
                exec sp_executesql @s   -- 此句会报错

--注:@s参数必须为ntext或nchar或nvarchar类型,必须将declare @s varchar(1000) 改为declare @s Nvarchar(1000)

如下:
                declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)

set @fname = 'FiledName' --设置字段名
                set @s = 'select ' + @fname + ' from tableName'
                Exec(@s)                -- 成功   
                exec sp_executesql @s   -- 此句正确

3. 输入或输出参数

(1)输入参数:
          declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @input_id int--定义需传入动态语句的参数的值

set @QueryString='select * from tablename  where id=@id'  --id为字段名,@id为要传入的参数
          set @paramstring='@id int' --设置动态语句中参数的定义的字符串
          set @input_id =1  --设置需传入动态语句的参数的值为1
          exec sp_executesql @querystring,@paramstring,@id=@input_id  
          若有多个参数:
          declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @input_id int--定义需传入动态语句的参数的值,参数1
          declare @input_name varchar(20)--定义需传入动态语句的参数的值,参数2

set @QueryString='select * from tablename  where id=@id
and name=@name'   --id与name为字段名,@id与@name为要传入的参数
          set @paramstring='@id int,@name varchar(20)' --设置动态语句中参数的定义的字符串,多个参数用","隔开
          set @input_id =1  --设置需传入动态语句的参数的值为1
          set @input_name='张三'   --设置需传入动态语句的参数的值为"张三"
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序
     (2)输出参数
             declare @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            exec(@sqls)
        --如何将exec执行结果放入变量中?         
        declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
        declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
        declare @output_result int--查询结果赋给@output_result

set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 为输出结果参数
        set @paramstring='@totalcount int output' --设置动态语句中参数的定义的字符串,多个参数用","隔开
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        select @output_result
        当然,输入与输出参数可以一起使用,大家可以自己去试一试。
        另外,动态语句查询的结果集要输出的话,我只想到以下用临时表的方法,不知各位有没有更好的方法.
        IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
            drop table #tmp
        select * into #tmp from tablename where 1=2 --创建临时表#tmp,其结构与tablename相同

declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
        set @QueryString='select * from tablename '
        insert into #tmp(field1,field2,...) exec(@querystirng)

sql server exec 参数的传递的更多相关文章

  1. Sql Server 带参数的存储过程执行方法

    Sql Server 带参数的存储过程执行方法 Visual C# 动态操作 SQL Server 数据库实例教程(4):带参数的存储过程执行方法 上一篇文章介绍了带参数的SQL语句执行方法和不带参数 ...

  2. Dapper use Table Value Parameter in C# (Sql Server 数组参数)

    Dapper 也可以使用 数组参数 参考:Blog on Github Dapper 调用存储过程 :单个参数 static void Main(string[] args) { var connec ...

  3. SQL Server - 最佳实践 - 参数嗅探问题 转。

    文章来自:https://yq.aliyun.com/articles/61767 先说我的问题,最近某个存储过程,暂定名字:sp_a 总是执行超时,sp_a带有一个参数,暂定名为 para1 var ...

  4. SQL Server 参数嗅探问题

    摘要 MSSQL Server参数嗅探既是一个涉及知识面非常广泛,又是一个比较难于解决的课题,即使对于数据库老手也是一个比较头痛的问题.这篇文章从参数嗅探是什么,如何产生,表象是什么,会带来哪些问题, ...

  5. SQL SERVER 查询性能优化——分析事务与锁(五)

    SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...

  6. 在SQL Server 2016里使用查询存储进行性能调优

    作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在 ...

  7. SQL Server 添加链接服务器

    背景 在SQL SERVER中,如果我们查询数据库需要关联另外一台数据库中表,在这种情况下我们可以通过添加服务器链接来实现. 案列 方式1.sql server 提供了图形化界面,如下: 右键> ...

  8. SQL SERVER 分布式事务(DTC)

    BEGIN DISTRIBUTED TRANSACTION指定一个由 Microsoft 分布式事务处理协调器 (MS DTC) 管理的 Transact-SQL 分布式事务的起始. 语法BEGIN ...

  9. SQL Server 2008 R2 性能计数器详细列表(三)

    原文:SQL Server 2008 R2 性能计数器详细列表(三) SQL Server,Deprecated Features 对象: 监视指定为不推荐使用的功能: SQL Server Depr ...

随机推荐

  1. H3C WLAN相关组织和标准

  2. redis基本操作使用

    连接redis [root@master src]# redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name root O ...

  3. linux虚拟串口及远程访问

    1. 虚拟终端概念 linux中有很多终端,如下简单介绍下各种终端或串口的概念. 1.1 tty:终端设备的统称 tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机.电 ...

  4. The Instruction Set In Cortex-M3

    The Cortex-M3 supports the Thumb-2 instruction set. This is one of the most important features of th ...

  5. 【转】GnuPG使用介绍

    一.什么是 GPG 要了解什么是 GPG,就要先了解 PGP. 1991 年,程序员 Phil Zimmermann 为了避开政府监视,开发了加密软件 PGP.这个软件非常好用,迅速流传开来,成了许多 ...

  6. Codeforces H. Malek Dance Club(找规律)

    题目描述: Malek Dance Club time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. appium+python自动化62-webview元素click失效问题解决

    前言 Appium 在切换到 webview 后,正确定位到元素,但是click () 事件后界面无响应,脚本运行正常不会报错. 主要原因是:混合APP 时监听全用的是tap事件,不是click事件 ...

  8. golang gomobile 环境搭建

    1. 安装Go语言SDK https://www.golangtc.com/download 2. 配置系统变量这建立GOROOT和GOPATH两个目录,分别对应sdk所在目录与项目文件根目录 3.  ...

  9. $().on()的知识点

    事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签. 假设一个元素div,它有一个下级元素p.<div> <p>元素</p></ ...

  10. Djiango-富文本编辑器

    借助富文本编辑器,网站的编辑人员能够像使用offfice一样编写出漂亮的.所见即所得的页面.此处以tinymce为例,其它富文本编辑器的使用也是类似的. 在虚拟环境中安装包. pip install ...