小议SQL SERVER与oracle的动态S...

注意:SQL SERVER定义动态SQL时,执行SQL 命令字符串必须为'ntext/nchar/nvarchar' 的参数 '@statement',若有输出,则输出参数也需要是'ntext/nchar/nvarchar' 的参数 '@parameters'
目的:使用动态SQL创建数据表
oracle 动态SQL方式:
declare
begin
execute immediate 'create table t1(id int,sp varchar(50))';
end;
SQL SERVER动态SQL方式:
begin
declare @st nvarchar(500);
set @st='create table t1(id int,sp varchar(500))'
exec(@st)
end;
备注:动态SQL一般用于块中或存储过程中,若针对select操作,oracle将无数据返回,而SQL SERVER支持数据返回。
动态SQL:输出参数,将动态SQL中的相关参数或结果放入输出参数方式
create table t1(id int,sp varchar(500));
insert into t1 values(1,'asd');
insert into t1 values(2,'we');
insert into t1 values(3,'xxs');
sql server方式:
begin
declare @st nvarchar(500),@num int;
set @st='select @pp=count(*) from t1'
exec sp_executesql @st,N'@pp int output',@num output
select @num
end;
多参数方式:
begin
declare @st nvarchar(500),@num int,@tt varchar(20);
set @st='select @pp=id,@ss=sp from t1 where id=1'
exec sp_executesql @st,N'@pp int output,@ss varchar(20) output',@num output,@tt output
select @num,@tt
end;
oracle方式:
declare
sp int;
begin
execute immediate 'select count(*) from t1' into sp;
dbms_output.put_line(sp);
end;
多输出参数方式:
declare
SS int;
SP VARCHAR(20);
begin
execute immediate 'select id,sp from t1 where id=1' into SS,SP;
dbms_output.put_line(ss||' '||sp);
end;
Tags: 

延伸阅读

最新评论

发表评论