sqlserverexecsql
⑴ sql server 中EXEC的用法
字段名和表名在EXEC里面必须是确定的
你可以换一种形式比如:
select @temp=left_code from item_code where filter_name=@filter_name
⑵ SQL SERVER 2008 关于用EXEC执行存储过程的问题
不带 exec的执行存储过程必须是事务的第一句
我举个例子你就明白了
比如说我建立了一个存储过程 procName
第一种情况:不用exec的
create table ()..
GO --注意这里的GO 表示要开始下一个事务了
procName --这里直接使用存储过程名字 就是调用了
第二种情况:一定要使用 exec的
create table()
exec procName --你看这里,它不是作为这个事务的第一句开始的 所以要带上exec
⑶ sql server 如获得exec()执行语句的返回值
其实要分两种,一种是成功执行,另一种是执行失败抛出错误
建议使用sqlserver2005以后(看你用了max应该是2005以后的版本)新增的结构体begin try...end try...begin catch...end catch来捕获
ps.题外话,要保存中文,最好使用nvarchar,虽然存储空间增大了一倍,但是会避免有些情况下的乱码问题
⑷ sql server 2005如何使用exec命令
desc是查询表结构的命令、
exec是执行过程的命令、
两个不一样
exec 后面跟的是过程名、跟表名当然会报错
⑸ sql server中exec(赋给sql语句的变量)如何用变量保存值
好象有点明白了。假设你的存储过程有一个输入一个输出参数,并已经建立了这个存储过程,那你只要宣布两个变量分别为输入和输出 (比如如下语句):
DECLARE @para_inINT,@para_out VARCHAR(100);
DECLARE @sqlcmd varchar(500);
SET @para_in=2;
EXEC [你的存储过程] @para_in, @para_out;
PRINT @para_out;
你可以看到你的输出结果被打印出来。你还可以将@para_out拼到@sqlcmd中,然后执行;或做为另一存储过程的输入参数。
SET @sqlcmd = 'PRINT ''This isoutput parameter -' + @para_out + '''';
EXEC (@sqlcmd);或EXEC [另一存储过程] @para_out;
旦愿这回答了你的问题 :-)
⑹ sql server 中的EXEC有什么用!
exec函数族的作用为根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。
exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,看上去还是旧的躯壳,却已经注入了新的灵魂。只有调用失败了,它们才会返回一个-1,从原程序的调用点接着往下执行。
(6)sqlserverexecsql扩展阅读
使用exec函数族主要有两种情况:
1、当进程认为自己不能再为系统和用户做出任何贡献时,就可以调用exec函数族中的任意一个函数让自己重生。
2、如果一个进程想执行另一个程序,那么它就可以调用fork函数新建一个进程,然后调用exec函数族中的任意一个函数,这样看起来就像通过执行应用程序而产生了一个新进程(这种情况非常普遍)。
⑺ sqlserver中如何在用户定义的函数里使用exec
这里我举个例子,假如有一个函数dbo.NumAdd用来计算加法,那它可能是这样的:
DROP FUNCTION dbo.NumAdd
GO
CREATE FUNCTION dbo.NumAdd
( @A SMALLINT,
@B SMALLINT
)
RETURNS INT
AS
BEGIN
DECLARE @Ret INT
SET @Ret = ISNULL(@A,0) + ISNULL(@B,0)
RETURN @Ret
END
你可以使用这样的方式调用函数并得到返回值:
DECLARE @M INT
SET @M = dbo.NumAdd(500,700)
select @M
现在,把这个函数修改成第一种使用存储过程的方式:
DROP Procere dbo.NumAdd1
GO
CREATE Procere dbo.NumAdd1
( @A SMALLINT,
@B SMALLINT,
@Ret INT OUTPUT
)
AS
BEGIN
SET @Ret = ISNULL(@A,0) + ISNULL(@B,0)
END
GO
那么,你就可以通过下列的方法调用这个实际和函数dbo.NumAdd功能相同的存储过程:
DECLARE @M1 INT
EXEC dbo.NumAdd1 500,600,@M1 OUTPUT
SELECT @M1
这种方法是对标量函数较好的处理方法,而且,一个存储过程可以使用一个或者多个带有OUTPUT的参数来返回值。
再看第二种方法修改为存储过程的方式:
DROP Procere dbo.NumAdd2
GO
CREATE Procere dbo.NumAdd2
( @A SMALLINT,
@B SMALLINT
)
AS
BEGIN
DECLARE @Ret INT
SET @Ret = ISNULL(@A,0) + ISNULL(@B,0)
SELECT @Ret
END
GO
这样,你就可以使用下面的方法来调用:
DECLARE @M2 INT
CREATE TABLE #Temp (Result INT)
INSERT #Temp EXEC dbo.NumAdd2 800,600
SELECT TOP 1 @M2 = Result FROM #Temp
DROP TABLE #Temp
SELECT @M2
列出的这两种方法都是把函数改成存储过程的方法,而且在存储过程中可以使用EXEC、PRINT等函数中不能使用的内容。
这个解释你明白了吗?