declare @sql nvarchar(max)declare @nu int set @sql='SELECT * FROM [FMTest].[dbo].[FM_Radio_Station]'set @sql='SELECT @nu=count(0) from('+@sql+')aa'EXEC sp_executesql @sql,N'@nu AS INT OUTPUT',@nu OUTPUTSELECT @nu
SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方式的用法. 先建立一个表,并添加一些数据来进行演示: CREATE TABLE t_student( Id INT NOT NULL, Name NVARCHAR () NULL, Age TINYINT NULL, School NVARCHAR() NULL, Class NVARCHAR()
之前做项目的时候负责一个成绩分析的模块儿,写存储过程的时候因为考试的科目是不固定的,所以导致查找成绩的sql语句也是动态的,就用到了sp_executesql,下面就来说一说它的用法 需求:表名是动态的,必须用exec来执行,然后在exec里边还得给变量动态赋值 这时候exec 就搞不定了 exec('select @count=count(empid) from '+@tableName+' where proid='+@proid+' and id<'+@id+' and state!=4
首先创建数据表 IF object_id('TestTable') IS NOT NULL DROP TABLE TestTable GO ,),Info )) GO INSERT TestTable SELECT 'a' UNION ALL SELECT 'b' GO 然后依次执行以下三个脚本 脚本一: EXEC('SELECT * INTO #temp FROM TestTable')SELECT * FROM #temp 脚本二: exec SP_EXECUTESQL N'SELECT *
写法1: AlTER PROCEDURE TryAgain @ReturnValue int output AS declare @aa nvarchar(), @ForumID int, @count int, @TotalRecords int BEGIN ),@ForumID) EXEC sp_executesql @aa,N'@ReturnValue int output ',@ReturnValue output END 写法2: AlTER PROCEDURE TryAgain @R
在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值查询Cost值(表名不确定但表结构确定,如下面的Product表) 如果不考虑获取返回值,我们这样写即可: ) ) ,) ) set @tableName='Product' ' set @sql='select Cost from '+@tableName+' where Id='+@id exe