关于 as 关键字的问题 --示例如下:declare@name varchar(30)set @name='列名'select getDate() as @name--为什么就不行呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 as的作用之一是改变该查询结果的列明,你的应该改为select getDate() as name如果要为@name赋值,可以这么写select @name=getDate() 动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: 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 -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output select @num exec ('declare@name varchar(30)set @name=''列名''exec(''select getDate() as ''+@name+'''')')/*列名 ------------------------------------------------------ 2008-04-23 12:44:46.307(所影响的行数为 1 行)*/ 当然不行了。用别的方法。declare@name varchar(30)set @name='列名'exec ('select getdate() as ' + @name ) declare@name varchar(30)set @name='列名'exec ('select getDate() as ['+@name+']') declare@name varchar(30)set @name='列名'exec('select getDate() as '+@name+'')/*列名 ------------------------------------------------------ 2008-04-23 12:44:46.307(所影响的行数为 1 行)*/ declare @name varchar(30)set @name='列名'exec ('select getdate() as ' + @name ) 如何按要求批量修改数据 sql server2005安装问题 为什么在程序登陆界面中输入用户名和密码时,点确定按钮时总是显示“无法获得连接句柄!"” xml问题 MySql 备份还原 MSSQL2000某重复行设置 索引多久重建一次较好? start with函数在SQL2005中如何对应? 关于sql server2000 IIS VDM的安全问题。 高分求解!!!! sql中如何将多行中数据的插入到一行中 这样的SQL查询语句怎么写,我问都不会问::::
如果要为@name赋值,可以这么写
select @name=getDate()
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
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 -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
@name varchar(30)
set @name=''列名''exec(''select getDate() as ''+@name+'''')')
/*列名
------------------------------------------------------
2008-04-23 12:44:46.307(所影响的行数为 1 行)
*/
用别的方法。
declare@name varchar(30)
set @name='列名'exec ('select getdate() as ' + @name )
@name varchar(30)
set @name='列名'exec ('select getDate() as ['+@name+']')
@name varchar(30)
set @name='列名'exec('select getDate() as '+@name+'')
/*列名
------------------------------------------------------
2008-04-23 12:44:46.307(所影响的行数为 1 行)
*/
declare @name varchar(30)
set @name='列名'exec ('select getdate() as ' + @name )