sp_executesql的用法


需求:表名是動態的,必須用exec來執行,然后在exec里邊還得給變量動態賦值  這時候exec 就搞不定了

exec('select @count=count(empid) from '+@tableName+' where proid='+@proid+' and id<'+@id+' and state!=4')

下邊這個代碼如果去掉where后邊的東東就是可以的

一:正確

set @sql=N'select @count=count(empid) from '+@tableName
exec sp_executesql @sql,N'@count int output ',@count output
select @count

二:錯誤

set @sql=N'select @count=count(empid) from '+@tableName+' where proid='+@proid+' and id<'+@id+' and state!=4'
exec sp_executesql @sql,N'@count int output ',@count output
select @count

后來去查msdn才知道要這樣:傳送門

三:正確(我的例子包含表名,表名不可以直接和proid1一樣 表名必須要用 ‘+表名+’ ,不加的我試過了報錯

declare @count int,@tableName nvarchar(50),@SQLString nvarchar(max),@proid int,@id int,@ParmDefinition nvarchar(max);
set @tableName='table27';
set @proid=433;
set @id=159;
--set @sql=N'select @count=count(empid) from table27'
set @SQLString=N'select @countOUT=count(empid) from '+@tableName+' where proid=@proid1 and id<@id1 and state!=4';
set @ParmDefinition=N'@proid1 int,@id1 int,@countOUT int output';
exec sp_executesql @SQLString,@ParmDefinition,@proid1=@proid,@id1=@id,@countOUT=@count output;
select @count;

官方的例子:

DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @max_title varchar(30);

SET @IntVariable = 197;
SET @SQLString = N'SELECT @max_titleOUT = max(Title)
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID = @level
';
SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
SELECT @max_title;

MSDN的解釋:

執行可以多次重復使用或動態生成的 Transact-SQL 語句或批處理。Transact-SQL 語句或批處理可以包含嵌入參數。

MSDN的語法:

sp_executesql [ @stmt = ] stmt
[
{, [@params=
] N'@parameter_name data_type [ OUT | OUTPUT ][,...n]' }
{, [ @param1 = ] 'value1' [ ,...n ] }
]

 

語法我看不懂啊 看不懂

 

看實例代碼才看懂的有木有

 

總結:

@sqlstring :就是你要執行的sql語句字符串
@ParmDefinition@sqlstring里邊用到的參數在這里聲明 輸出的參數要加output
sp_executesql:
第一個參數sqlstring 就是執行的sql字符串了
第二個參數@ParmDefinition是@sqlstring里邊用到的參數在這里聲明 輸出的參數要加output
最后的參數加output的參數是輸出的參數(需要和外部的相對應的變量建立關聯)
中間的參數就是@sqlstring 里邊用到的參數(需要和外部的相對應的變量建立關聯)
最后你可以 select 輸出的參數 來查詢(select @count)









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM