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

本文介绍了一种使用SQL Server的动态SQL技术来获取指定图片表中的最大图片ID的方法。通过存储过程实现,允许传入不同的表名和列名作为参数,从而灵活应用于不同数据表的查询需求。

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+','+'@Length'+',20) from '+@TableName+')';
exec sp_executesql @sql,@param,@VarLength,@numstr output

select cast(@numstr as int)


END

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值