if object_id('P_1','P')is not null drop proc P_1
go
create proc p_1
@参数1 varchar(50),
@参数2 varchar(50),
@参数3 varchar(50),
@参数4 varchar(50),
@参数5 varchar(50)
as
if object_id('aa_080924','U')is not null drop table aa_080924
create table aa_080924(名称 nvarchar(50) unique,列名 nvarchar(50),值 nvarchar(50))
insert into aa_080924(名称,列名,值)values(@参数1,110,1020)
insert into aa_080924(名称,列名,值)values(@参数2,120,1030)
insert into aa_080924(名称,列名,值)values(@参数3,130,1040)
insert into aa_080924(名称,列名,值)values(@参数4,140,1050)
insert into aa_080924(名称,列名,值)values(@参数5,150,1060)
create unique index myclumn_cindex on aa_080924(值)
go
exec P_1 '参数1','参数2','参数3','参数4','参数5'昨天我也发过类似的例,我还是不太理解,求高手帮忙解答的同时加上注释,谢谢。上面是一段小代码,我想让aa_080924这张表的名字随时间变化而变化,比如说今天是20081007,生成这张表就应该是aa_081007,下面几行里也有aa_080924,要更改的话是不是都得需要修改下啊,怎么来实现它,求高手帮忙解决下,谢谢。
go
create proc p_1
@参数1 varchar(50),
@参数2 varchar(50),
@参数3 varchar(50),
@参数4 varchar(50),
@参数5 varchar(50)
as
if object_id('aa_080924','U')is not null drop table aa_080924
create table aa_080924(名称 nvarchar(50) unique,列名 nvarchar(50),值 nvarchar(50))
insert into aa_080924(名称,列名,值)values(@参数1,110,1020)
insert into aa_080924(名称,列名,值)values(@参数2,120,1030)
insert into aa_080924(名称,列名,值)values(@参数3,130,1040)
insert into aa_080924(名称,列名,值)values(@参数4,140,1050)
insert into aa_080924(名称,列名,值)values(@参数5,150,1060)
create unique index myclumn_cindex on aa_080924(值)
go
exec P_1 '参数1','参数2','参数3','参数4','参数5'昨天我也发过类似的例,我还是不太理解,求高手帮忙解答的同时加上注释,谢谢。上面是一段小代码,我想让aa_080924这张表的名字随时间变化而变化,比如说今天是20081007,生成这张表就应该是aa_081007,下面几行里也有aa_080924,要更改的话是不是都得需要修改下啊,怎么来实现它,求高手帮忙解决下,谢谢。
--1. 执行字符串中的T-SQL
DECLARE @sql nvarchar(max)
SET @sql = N'SELECT * FROM sys.objects'
EXEC(@sql)--1. 使用 EXEC 实现的动态参数存储过程
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
--比如
create table t1(id int unique)
go