sp_executesql 与 参数

sp_executesql 与 参数总结了一下 sp_executesql 与 参数 的关系 sp_executesql  并不能通过参数列表指定任意部分,在普通sql语句中是变量的可以指定,是常量的不能指定。在sp_executesql 执行的字符串中, 下面称为spStr,有些是在设置sql字符串前就必须指定的,有些是以变量的形式指定的。跟sql语句相一致,这里语句称为 sqlStr,凡是在sqlStr语句中必须要声明为常

大家好,又见面了,我是你们的朋友全栈君。

总结了一下 sp_executesql 与 参数 的关系 

sp_executesql  并不能通过参数列表指定任意部分,在普通sql语句中是变量的可以指定,是常量的不能指定。

在sp_executesql 执行的字符串中, 下面称为spStr,有些是在设置sql字符串前就必须指定的,有些是以变量的形式指定的。跟sql语句相一致,这里语句称为 sqlStr,凡是在sqlStr语句中必须要声明为常量的,在 执行 sp_executesql 前,spStr中的相应的部分,也必须已经被赋值了,以字符常量的形式存在了。如 create table constTableName …中的constTableName , select top constNum…中的 constNum。

如下是正确的

》----------------------------

declare @tableName nvarchar(20);

declare @spStr nvarchar(200);

set @ tableName = N’myTestTable’;

set @spStr = N’ create table’ + @ tableName + N’ … ‘

execute sp_executesql @spStr;

----------------------------------||

如下是错误的

》----------------------------

declare @tableName nvarchar(20);

declare @spStr nvarchar(200);

set @ tableName = N’myTestTable’;

set @spStr = N’ create table  @ tableName  … ‘

execute sp_executesql @spStr, N’   @ tableName  nvarchar(20)’ ,@tableName 

----------------------------------||

 

-----------------------------------------------

下面是以前写的一个动态存储过程

declare @nNum int;
set @nNum = @nPageSize * ( @nCurPage – 1 );

set @charSQL = N’select top ‘ +   cast(@nNum as nvarchar(20)) + N’ @nFirstID = nSceID ‘ +
N’ from t_sceCardCN 
  where ( t_sceCardCN.nSceID between @nItemIDMin and  @nItemIDMax )
  and (  t_sceCardCN.nSceClass = @nSceClass and t_sceCardCN.nSceGrade =  
               @nSceGrade ) ‘

EXECUTE  sp_executesql @charSQL
,N’@nNum  int, @nFirstID int output , @nItemIDMin int, @nItemIDMax                 int,  @nSceClass smallint, @nSceGrade smallint ‘
,@nNum, @nFirstID output , @nItemIDMin,@nItemIDMax, @nSceClass,                  @nSceGrade

说明:@nNum,在 sp_executesql  虽然更在参数列表中,但是是没有什么意义的。是以前写的。现在才明白。呵呵 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143423.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CreateEvent方法详解

    CreateEvent方法详解HANDLECreateEvent(  LPSECURITY_ATTRIBUTESlpEventAttributes,//安全属性  BOOLbManualReset,//复位方式  BOOLbInitialState,//初始状态  LPCTSTRlpName//对象名称);调用示例:hEvent=CreateEvent(NULL,TRUE,…

    2022年7月12日
    21
  • mysql通配符和正则表达式

    mysql通配符和正则表达式通配符关键字是like。表示要跟like后的字符串完全匹配才能匹配上。如果没有通配符,匹配字符串时,like就跟等于号是相同含义的。like和等于的区别就是like后字符串里面可以插入一些通配符,类似于可变字符,使得字符串匹配难度降低一点。通配符有下面两个。%(百分号)匹配任意多个字符(0个或多个)_(下划线)匹配一个字符(有且仅有一个)正则表达式关键字是regexp(regularexpression简写)。正则匹配不用完全匹配,只需包含…

    2022年6月20日
    20
  • Informix 常用函数

    Informix 常用函数一、内部函数1、内部合计函数1)COUNT(*)返回行数2)COUNT(DISTINCTCOLNAME)返回指定列中唯一值的个数3)SUM(COLNAME/EXPRESSION)返回指

    2022年7月3日
    22
  • origin绘制柱形图_origin绘制柱状图

    origin绘制柱形图_origin绘制柱状图使用Origin绘制一幅类似于下图的中文版柱状图。

    2022年9月30日
    0
  • 平衡二叉树AVL删除

    平衡二叉树AVL删除

    2021年9月14日
    50
  • 用户态和内核态的简单理解「建议收藏」

    用户态和内核态的简单理解「建议收藏」文章目录linux基础系统调用和库函数的区别什么是用户态和内核态用户态和内核态的相互转换linux基础linux的kernel内核外是系统调用,系统调用外是shell、库函数系统调用和库函数的区别内核:屏蔽了调用各硬件资源的细节系统调用:内核提供给用户调用的接口,但系统调用的可移植性差移植性差的原因:windows、linux内核的系统调用是不同的,比如:同一个功能提供给用户的函数名、参数都不相同,会出现从一个系统移植到另一个系统无法正常运行。库函数:为了解决系统调用移植新差的问题,同时封

    2022年9月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号