求一个替代方法,不用动态执行SQL,能不能动态选择列? 不使用拼接SQL语句。能使用变量值作为列名来select吗?请高手给指个思路例如:Declare @nameselect @name from mytable 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不可以,这样结果虽然不报错,但结果确只是一些常量集合。编译器会把你的变量的值当成常量,所以不报错。例如:delcare @n varchar(10)set @n ='*'select @n from table....结果如同:select '*' from table....---**table中有多少条记录就会有多少个*。 动态select列,不管用什么形式,最终要用到动态SQL. 5楼说的对,动态列名,只能用动态SQL语句生成了。 字段名,表名,数据库名之类作为变量时,必须用动态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 -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 为何字段的数据类型也要加方括号? 关于SET IDENTITY_INSERT OPENDATASOURCE(....) ON出错的问题 如何把数据放到cache 如何看sql server 2000 是sp几的 添加外键约束不成功。我该如何做?如何查出是哪些不符合约束? 请问关于数据类型问题 大家请来讨论一下MSSQLSVR上sleeping状态 绝对经典的一道数据库查询问题,求个SQL语句。 欢迎讨论!大家都有什么好方法?关于图片处理! 两台电脑用modem连通后,数据库能连接吗? 关于卡号挂失的问题 select多表查询疑难杂症
编译器会把你的变量的值当成常量,所以不报错。
例如:
delcare @n varchar(10)set @n ='*'select @n from table....
结果如同:
select '*' from table....
---*
*
table中有多少条记录就会有多少个*。
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 -- 此句正确