加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

表名作存储过程参数 使用sp_executesql动态语句

发布时间:2020-12-12 15:50:08 所属栏目:MsSql教程 来源:网络整理
导读:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:??胡海 -- Create date: 2008-8-6 -- Description:?? -- ============================================= ALTER PROCEDURE [dbo].[获取当前图片

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:??胡海
-- Create date: 2008-8-6
-- Description:??
-- =============================================
ALTER PROCEDURE [dbo].[获取当前图片表中最大图片ID]
?(
?@TableName varchar(20),????????? ? --图片表名
?@Pic_ColumnName varchar(20),--图片表中的图片列名
?@Obj_ColumnName varchar(20)?--图片表中的对象列名
?)

AS

declare @VarLength int ;??--对象名长度
declare @numstr varchar(10);?--编码字符串

BEGIN
?-- SET NOCOUNT ON added to prevent extra result sets from
?
?SET NOCOUNT ON;
?
?declare @sql nvarchar(200);
?set @sql='select '+ '@Length' +' = (select Col_Length('''+@TableName+''','''+@Obj_ColumnName+''') from '+ @TableName +')';

?--注意加三个单引号的地方,这是关键。要感谢paoluo(一天到晚游泳的鱼),不然我死也找不出来错误在哪。
?exec sp_executesql @sql,N'@Length int output',@VarLength output?

?set @VarLength=@VarLength+1;
--substring(expr,pos_start,length)是从pos_start-1处开始提取字符串的,如'1234567890',substring('1234567890',8,10),
--如果我们想要第8位后面的字符串,以上写法就不行,因为它取的是从8开始后面的字符串,所以应从8加1位开始提取

?declare @param nvarchar(50)
?set @param=N'@Length int,@num_string nvarchar(10) output'
?set @sql='select '+ '@num_string'+'=(select substring('+@Pic_ColumnName+',20) from '+@TableName+')';???
?exec sp_executesql @sql,@param,@VarLength,@numstr output
?
?select cast(@numstr as int)
?
?
END

--希望能对用表名作存储过程参数的朋友有帮助,参数关于sp_executesql 的详细用法请参见SqlServer联机文档

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读