动态SQL语法

发布 2021-05-11 05:06:28 阅读 8773

1 :普通sql语句可以用exec执行例: select * from tablename

exec('select * from tablename')

exec sp_executesql n'select * from tablename' -请注意字符串前一定要加n

2:字段名,表名,数据库名之类作为变量时,必须用动态sql

错误: declare @fname varchar(20)

set @fname = filedname'

select @fname from tablename错误,不会提示错误,但结果为固定值filedname,并非所要。

正确: exec('select ' fname + from tablename请注意加号前后的单引号的边上加空格。

当然将字符串改成变量的形式也可。

declare @fname varchar(20)

set @fname = filedname' -设置字段名。

declare @s varchar(1000)

set @s = select ' fname + from tablename'

exec(@s成功。

exec sp_executesql @s --此句会报错。

注:@s参数必须为ntext或nchar或nvarchar类型,必须将declare @s varchar(1000) 改为declare @s nvarchar(1000)

如下:declare @s nvarchar(1000) -注意此处改为nvarchar(1000)

set @fname = filedname' -设置字段名。

set @s = select ' fname + from tablename'

exec(@s成功

exec sp_executesql @s --此句正确。

3. 输入或输出参数。

(1)输入参数:

declare @querystring nvarchar(1000) -动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

declare @paramstring nvarchar(200) -设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

declare @input_id int--定义需传入动态语句的参数的值。

set @querystring='select * from tablename where id=@id' -id为字段名,@id为要传入的参数。

set @paramstring='@id int' -设置动态语句中参数的定义的字符串。

set @input_id =1 --设置需传入动态语句的参数的值为1

exec sp_executesql @querystring,@paramstring,@id=@input_id

若有多个参数:

declare @querystring nvarchar(1000) -动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

declare @paramstring nvarchar(200) -设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

declare @input_id int--定义需传入动态语句的参数的值,参数1

declare @input_name varchar(20)--定义需传入动态语句的参数的值,参数2

set @querystring='select * from tablename where id=@id and name=@name' -id与name为字段名,@id与@name为要传入的参数。

set @paramstring='@id int,@name varchar(20)' 设置动态语句中参数的定义的字符串,多个参数用","隔开。

set @input_id =1 --设置需传入动态语句的参数的值为1

set @input_name='张三' -设置需传入动态语句的参数的值为"张三"

exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序。

(2)输出参数。

declare @num int, @sqls nvarchar(4000)

set @sqls='select count(*)from tablename'

exec(@sqls)

如何将exec执行结果放入变量中。

declare @querystring nvarchar(1000) -动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

declare @paramstring nvarchar(200) -设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

declare @output_result int--查询结果赋给@output_result

set @querystring='select @totalcount=count(*)from tablename' -totalcount 为输出结果参数。

set @paramstring='@totalcount int output' -设置动态语句中参数的定义的字符串,多个参数用","隔开。

exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output

select @output_result

当然,输入与输出参数可以一起使用,大家可以自己去试一试。

另外,动态语句查询的结果集要输出的话,我只想到以下用临时表的方法,不知各位有没有更好的方法。

if object_id('[tempdb].[dbo].#tmp') is not null --判断临时表#tmp是否存在,存在则删除。

drop table #tmp

select * into #tmp from tablename where 1=2 --创建临时表#tmp,其结构与tablename相同。

declare @querystring nvarchar(1000) -动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)

set @querystring='select * from tablename '

insert into #tmp(field1,field2,..exec(@querystirng)

sql语法

知识要点 1 transact sql运算符 1 算术运算符。注 null与任何值运算结果为null。运算可用于datetime型数据。2 字符串运算符。3 比较运算符。逻辑常量 ture false。4 逻辑运算符。not 非 and 与 or 或 between 指定范围 like 模糊匹配 5...

SQL语法

distinct 输出唯一值。select distinct from where between and 介于某一范围的数据。where 某行 between and in 属于某一子集合的数据。where 某行 in substring expression 开始位 长度 选取字符串。selec...

SQL语法

一 create table 数据表是数据库中储存数据的基本架构。举例来说,如果我们有一个记载顾客数据的数据表,那字段包括姓名 地址 城市 国家 生日 等等。当我们对数据表下定义时,我们需要注明字段名称,以及那个字段的类型。字段类型可能是一个整数 例如 1 一个实数 例如 0.55 一个字符串 例如...