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 -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)

set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确

转载于:https://www.cnblogs.com/lj821022/p/4546107.html

动态语句基本语法:1 :普通SQL语句可以用exec执行Select * from tableName exec('select * from tableName')exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fname v...
在编写 sql 语句或存储过程中,难免会有碰到语句中 名或某一 字段名 不确定,要根据条件来,考试,大提示我们可考虑用 SQL 提供的sp_execute sql 函数,,他可 执行 动态 的修改,删除,查询功能,至于此函数的详细解释可到 sql 帮助文档中去查看,下面我将举一个 动态 查询的列子,包括 名及想查询的字段均不确定:   (ID int) (A numeric(9,2)) (B numeri
use E_Graphics_Card if exists(select * from sys.objects where name='usp_Insert_Update_Bios_Info_Args') drop proc usp_Insert_Update_Bios_Info_Args CREATE PROC usp_Insert_Update_Bios_Info_Args declare @str sql varchar(50),               @table_name varchar(50) set @table_name='test'       --test是 名 set @str sql ='select count(*) from '+@table_name DECLARE cur CURSOR FOR SELECT id FROM v_proc; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; SET @select = concat('create VIEW v_proc as SELECT ...
-- select * from information_schema.tables -- 查询 的名称 select table_name from information_schema.tables Select * FROM SysColumns Where id=Object_Id('DIM_PROLINE') --查询 字段名 Select name FROM SysColum...
sys.columns c LEFT JOIN sys.extended_properties ep ON ep.major_id = c.object_id AND ep.minor_id = c.column_id AND ep.name = 'MS_Description' INNER JOIN sys.tables t ON c.object_id = t.object_id WHERE t.is_ms_shipped = 0 ORDER BY t.name, c.column_id; 该语句会查询所有非系统 的字段信息,并按照 名和字段 ID 排序。如果要查询特定架构下的自建 ,可以在 `sys.tables` 和 `SCHEMA_NAME` 函数中添加条件。