sql server 中EXEC的用法

2025-03-18 20:29:20
推荐回答(5个)
回答(1):

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

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



扩展资料

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

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

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

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

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

回答(2):

字段名和表名在EXEC里面必须是确定的

你可以换一种形式比如:
select @temp=left_code from item_code where filter_name=@filter_name

回答(3):

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 !

回答(4):

  在某些情况下,作用是一样的,如:
  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)

回答(5):

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

--这样试试!