sql server 中EXEC的用法

createprocedurefirst_test_sp(@filter_namenvarchar(1000))asdeclare@tempnvarchar(30)exe... create procedure first_test_sp(@filter_name nvarchar(1000))
as
declare @temp nvarchar(30)
exec ('select @temp=left_code from item_code where '+ @filter_name)
print @temp
go

当我调用该过程时,报出‘@temp’必须定义的错误!!!
请高手指教
展开
 我来答
生活类答题小能手
高能答主

2020-04-12 · 专注生活类答题,解决生活问题
生活类答题小能手
采纳数:1640 获赞数:295764

向TA提问 私信TA
展开全部

exec函数族的作用为根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。

exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,看上去还是旧的躯壳,却已经注入了新的灵魂。只有调用失败了,它们才会返回一个-1,从原程序的调用点接着往下执行。



扩展资料

使用exec函数族主要有两种情况:

1、当进程认为自己不能再为系统和用户做出任何贡献时,就可以调用exec函数族中的任意一个函数让自己重生。

2、如果一个进程想执行另一个程序,那么它就可以调用fork函数新建一个进程,然后调用exec函数族中的任意一个函数,这样看起来就像通过执行应用程序而产生了一个新进程(这种情况非常普遍)。

参考资料来源:百度百科-exec函数族

参考资料来源:百度百科-exec...

sytdeedee
2008-12-23 · TA获得超过442个赞
知道小有建树答主
回答量:694
采纳率:0%
帮助的人:636万
展开全部
字段名和表名在EXEC里面必须是确定的

你可以换一种形式比如:
select @temp=left_code from item_code where filter_name=@filter_name
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
只为遇见YC
推荐于2018-03-15 · TA获得超过327个赞
知道小有建树答主
回答量:335
采纳率:88%
帮助的人:45.5万
展开全部
EXEC 好像是 EXECUTE 的简写。

可以用来执行一个存储过程。

1> CREATE PROCEDURE HelloWorld AS
2> DECLARE
3> @testvalue1 AS VARCHAR(20),
4> @testvalue2 AS VARCHAR(20);
5> BEGIN
6> PRINT 'Hello World';
7> SET @testvalue1 = 'First Test !';
8> SELECT @testvalue2 = 'Second Test !';
9> PRINT( @testvalue1 + @testvalue2);
10> END;
11> go

1> exec HelloWorld
2> go
Hello World
First Test !Second Test !

1> execute HelloWorld
2> go
Hello World
First Test !Second Test !
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
糖糖寳寳
推荐于2016-07-01 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:4177万
展开全部
  在某些情况下,作用是一样的,如:
  USE DB;
  GO
  --Create The Table. We'll pull info from here for our dynamic SQL
  CREATE TABLE DynamicSQLExample (
  TableID int IDENTITY NOT NULL CONSTRAINT PKDynamicSQLExample PRIMARY KEY,
  SchemaName varchar(128) NOT NULL,
  TableName varchar(128) NOT NULL
  );
  GO
  /* Populate the table. In this case, We're grabbing every user ** table object in this database */
  INSERT INTO DynamicSQLExample
  SELECT s.name AS SchemaName, t.name AS TableName
  FROM sys.schemas s JOIN sys.tables t
  ON s.schema_id = t.schema_id;
  GO

  DECLARE @SchemaName varchar(128)
  DECLARE @TableName varchar(128)
  -- Now, grab the table name that goes with our ID
  SELECT @SchemaName = SchemaName, @TableName = TableName
  FROM DynamicSQLExample
  WHERE TableID = 3
  -- Finally, pass that value into the EXEC statement
  EXEC ('SELECT * FROM ' + @SchemaName + '.' + @TableName)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Sharon_QQ
推荐于2016-10-31 · TA获得超过492个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:381万
展开全部
create procedure first_test_sp(@filter_name nvarchar(1000))
as

exec ('declare @temp nvarchar(30) select @temp=left_code from item_code where '+ @filter_name)
print @temp
go

--这样试试!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式