我是个新手,学习使用存储过程中遇到个问题,不知道怎么办.
问题如下, 我建立了一个存储过程. 定义了变量 @ny, 然后我的存储过程中有一个这样的查询语句:
select * from tb201104_heji,
这样tb201104_heji 是一个表明. 我想通过前台传递过来的@ny来动态的替换查询内容,如果前台传递
过来201101给@ny, 那这个储存过程应该就查询tb201101的表,但是不是不知道这个表变量的格式该
怎么写, tb@ny_heji 这样写是错误的吧?请高手解答...谢谢.
问题如下, 我建立了一个存储过程. 定义了变量 @ny, 然后我的存储过程中有一个这样的查询语句:
select * from tb201104_heji,
这样tb201104_heji 是一个表明. 我想通过前台传递过来的@ny来动态的替换查询内容,如果前台传递
过来201101给@ny, 那这个储存过程应该就查询tb201101的表,但是不是不知道这个表变量的格式该
怎么写, tb@ny_heji 这样写是错误的吧?请高手解答...谢谢.
解决方案 »
- 请教乌龟前辈了。。。
- 插入数据库的问题
- 如何获取某个字段是否有默认值并获取这个默认值?
- 表更新插入问题?
- sql 2000中的交易日志和事务日志有什么不同?对日志进行了压缩还用删除吗?
- 一个简单的SQL语句,送分的,多谢了!
- 问高手 这个错误是怎么回事 --------- 进程 ID 56 试图解锁不属于该进程的资源 PAG: 8:1:58753。
- 如何把表名和字段名传递到存储过程中(Sql Server)???help me
- 如何把表的名字作为变量来创建存储过程?
- 求使用mssql进行多表查询的语句
- 求一個排序方法,兩個時間,用最小的排序
- 今天,sql2000server服务器经常没有响应了,好多客户端出现没有响应,好长时间提示“超时”
declare @ny varchar(100)
declare @sql varchar(8000)
set @ny = '201104'
set @sql = 'select * from tb' + @ny + '_heji'
exec(@sql)
declare @sql varchar(8000)
set @ny = '201104'
set @sql = 'select * from tb' + ltrim(@ny) + '_heji'
exec(@sql)
@ny varchar(9) AS
set nocount on
begin
select * from tb@ny_heji
end
go
CREATE PROC p_test
@para1 varchar(10)=null,
@para2 varchar(10)=null,
@para3 varchar(10)=null,
@para4 varchar(10)=null
AS
SET NOCOUNT ON
DECLARE @sql varchar(8000)
SET @sql='SELECT * FROM tbname WHERE 1=1'
IF @para1 IS NOT NULL
SET @sql=@sql+' AND col1='''+@para1+''''
IF @para2 IS NOT NULL
SET @sql=@sql+' AND col2='''+@para2+''''
IF @para3 IS NOT NULL
SET @sql=@sql+' AND col3='''+@para3+''''
IF @para4 IS NOT NULL
SET @sql=@sql+' AND col4='''+@para4+''''
EXEC(@sql)
GO
/*======================================================*/--2. 使用 sp_executesql 实现的动态参数存储过程
CREATE PROC p_test
@para1 varchar(10)=null,
@para2 datetime=null,
@para3 varchar(10)=null,
@para4 int=null
AS
SET NOCOUNT ON
DECLARE @sql nvarchar(4000)
SET @sql='SELECT * FROM tbname WHERE 1=1'
+CASE WHEN @para1 IS NULL THEN '' ELSE ' AND col1=@para1' END
+CASE WHEN @para2 IS NULL THEN '' ELSE ' AND col2=@para2' END
+CASE WHEN @para3 IS NULL THEN '' ELSE ' AND col3=@para3' END
+CASE WHEN @para4 IS NULL THEN '' ELSE ' AND col4=@para4' END
EXEC sp_executesql @sql,N'
@para1 varchar(10)=null,
@para2 datetime=null,
@para3 varchar(10)=null,
@para4 int=null
',@para1,@para2,@para3,@para4
GO
/*======================================================*/--3. 不使用动态 Transact-SQL 语句实现的动态参数存储过程
CREATE PROC p_test
@para1 varchar(10)=null,
@para2 datetime=null,
@para3 varchar(10)=null,
@para4 int=null
AS
SET NOCOUNT ON
SELECT * FROM tbname
WHERE (@para1 IS NULL OR col1=@para1)
AND (@para2 IS NULL OR col2=@para2)
AND (@para3 IS NULL OR col3=@para3)
AND (@para4 IS NULL OR col4=@para4)