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等函數中不能使用的內容。
這個解釋你明白了嗎?