當前位置:首頁 » 編程語言 » execsql返回值

execsql返回值

發布時間: 2022-05-08 21:18:34

『壹』 sql 獲取返回值

用sp_executesql執行語句,
declare @col int,@name1 char(1)

exec sp_executesql N'SELECT @col=col FROM [dbo].TestTable] WHERE ([Name] <> @Name1 )',
N'@Name1 char(1),@col int output',@Name1='a',@col output

『貳』 sql server 如獲得exec()執行語句的返回值

其實要分兩種,一種是成功執行,另一種是執行失敗拋出錯誤
建議使用sqlserver2005以後(看你用了max應該是2005以後的版本)新增的結構體begin try...end try...begin catch...end catch來捕獲

ps.題外話,要保存中文,最好使用nvarchar,雖然存儲空間增大了一倍,但是會避免有些情況下的亂碼問題

『叄』 SQL 取存儲過程的返回值

存儲過程應該有返回值的,
問題應該出現在你vb6的調用語句中(第二個參數是輸出類型的參數,
是否有正確設置).
你可以在查詢分析器中執行此存儲過程,
看看返回的結果.
還有,
此存儲過程中的select語句最好加上top
1限制,
因為你只要判斷是否能選到結果而已:
select
top
1
*
from
tb_package
where
packagenumber=@a

『肆』 如何接收sql語句執行.的返回值

獲取存儲過程返回值及代碼中獲取返回值
1.OUPUT參數返回值
例: 向Order表插入一條記錄,返回其標識

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
END
END
存儲過程中獲得方法:

DECLARE @o_buyerid int
DECLARE @o_id bigint
EXEC [nb_order_insert] @o_buyerid ,o_id bigint
2.RETURN過程返回值

CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
IF(EXISTS(SELECT * FROM [Shop] WHERE [s_id] = @o_shopid))
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
RETURN 1 — 插入成功返回1
END
ELSE
RETURN 0 — 插入失敗返回0
END
存儲過程中的獲取方法
DECLARE @o_buyerid int
DECLARE @o_id bigint
DECLARE @result bit
EXEC @result = [nb_order_insert] @o_buyerid ,o_id bigint
3.SELECT 數據集返回值

CREATE PROCEDURE [dbo].[nb_order_select](
@o_id int
)
AS
BEGIN
SET NOCOUNT ON;
SELECT o_id,o_buyerid FROM [Order]
WHERE o_id = @o_id
GO
存儲過程中的獲取方法
(1)、使用臨時表的方法

CREATE TABLE [dbo].[Temp](
[o_id] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[o_buyerid] [int] NOT NULL
)
INSERT [Temp] EXEC [nb_order_select] @o_id
– 這時 Temp 就是EXEC執行SELECT 後的結果集
SELECT * FROM [Temp]
DROP [Temp] — 刪除臨時表
(2)、速度不怎麼樣.(不推薦)

SELECT * from openrowset(』provider_name','Trusted_Connection=yes』,'exec nb_order_select』)

1.獲取Return返回值

程序代碼
//存儲過程
//Create PROCEDURE MYSQL
// @a int,
// @b int
//AS
// return @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcere;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 10;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@return"].Value.ToString());
2.獲取Output輸出參數值

程序代碼
//存儲過程
//Create PROCEDURE MYSQL
// @a int,
// @b int,
// @c int output
//AS
// Set @c = @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcere;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));
MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@c"].Value.ToString());

C#接收存儲過程返回值:
public static int User_Add(User us)
{
int iRet;
SqlConnection conn = new SqlConnection(Conn_Str);
SqlCommand cmd = new SqlCommand("User_Add", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@UName", us.UName);
cmd.Parameters.AddWithValue("@UPass", us.UPass);
cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
cmd.Parameters.AddWithValue("@Email", us.Email);
cmd.Parameters.AddWithValue("@RName", us.RName);
cmd.Parameters.AddWithValue("@Area", us.Area);
cmd.Parameters.AddWithValue("@Address", us.Address);
cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
cmd.Parameters.AddWithValue("@Phone", us.Phone);
cmd.Parameters.AddWithValue("@QQ", us.QQ);
cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;
try
{
conn.Open();
cmd.ExecuteNonQuery();
iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
return iRet;
}
C#接收存儲過程輸出參數:
public static decimal Cart_UserAmount(int UID)
{
decimal iRet;
SqlConnection conn = new SqlConnection(Conn_Str);
SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@UID", UID);
cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Direction=ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
iRet = (decimal)cmd.Parameters["@Amount"].Value;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
return iRet;
}

//////////////////////////////////////////////////////////////
SQL 2000用戶自定義函數 一。SQL Server 的三種自定義函數
「自定義函數」是我們平常的說法,而「用戶定義的函數」是 SQL Server 中書面的說法。
SQL Server 2000 允許用戶創建自定義函數,自定義函數可以有返回值。
自定義函數分為:標量值函數或表值函數
•如果 RETURNS 子句指定一種標量數據類型,則函數為標量值函數。可以使用多條 Transact-SQL 語句定義標量值函數。
•如果 RETURNS 子句指定 TABLE,則函數為表值函數。
表值函數又可分為:內嵌表值函數(行內函數)或多語句函數
•如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數為內嵌表值函數。
•如果 RETURNS 子句指定的 TABLE 類型帶有列及其數據類型,則該函數是多語句表值函數。
標量值函數示例
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END
create function GetSex(@sex int)
returns varchar(2)-- 用nvarchar(1)
as -- nvarchar:不管是一個字元還是一個漢字,都存為2個位元組
begin -- varchar:漢字是2個位元組,其他字元存為1個位元組
declare @ssex varchar(2)-- 用nvarchar(1)
if(@sex=1)
set @ssex='男'
else
set @ssex='女'
return (@ssex)
end
調用:
select id,username,dbo.GetSex(Sex) as sex ,loginnum from t_user
內嵌表值函數示例
CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS
return select id, title from msgs
內嵌表值函數只有一個 select 語句。
多語句表值函數示例(部分)
CREATE FUNCTION FindUsers (@userid int )
RETURNS @FindUser TABLE (id int primary key, UserName varchar(30), RegDateTime DateTime,LoginNum int)
as
begin
insert into @FindUser Select ID, UserName,RegDateTime,LoginNum From T_User Where ID=@userid
return
end
調用:
SELECT * FROM FindUsers(6)
注意其 RETURNS 部分。
多語句函數的主體中允許使用以下語句。未在下面的列表中列出的語句不能用在函數主體中。
•賦值語句。
•控制流語句。
•DECLARE 語句,該語句定義函數局部的數據變數和游標。
•SELECT 語句,該語句包含帶有表達式的選擇列表,其中的表達式將值賦予函數的局部變數。
•游標操作,該操作引用在函數中聲明、打開、關閉和釋放的局部游標。只允許使用以 INTO 子句向局部變數賦值的 FETCH 語句;不允許使用將數據返回到客戶端的 FETCH 語句。
•INSERT、UPDATE 和 DELETE 語句,這些語句修改函數的局部 table 變數。
•EXECUTE 語句調用擴展存儲過程。
二.如何調用自定義函數

調用自定義函數(用戶定義的函數)和調用內置函數方式基本相同,
•當調用標量值函數時,必須加上「所有者」,通常是 dbo(但不是絕對,可以在企業管理器中的「用戶定義的函數」中查看所有者)。
•當調用表值函數時,可以只使用函數名稱。
示例
SELECT *
select dbo.Sta(cnt) from tbl
示例
SELECT *
FROM fn_MyTableFunc( 123.09, N'O''Neill' )
三。存儲過程和自定義函數的區別
存儲過程(用戶定義的存儲過程)和自定義函數(用戶定義的函數)的區別,在網上已經有討論過,但有些顯得過於零散,有些又篇幅過長不能保證每個人都細心閱讀。這里作一個歸納,當然只是應用層面的,可能不全面。
•存儲過程,功能強大,可以執行包括修改表等一系列資料庫操作,也可以創建為 SQL Server 啟動時自動運行的存儲過程。
•自定義函數,用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。

•存儲過程,可以使用非確定函數。
•自定義函數,不允許在用戶定義函數主體中內置非確定函數。

•存儲過程,可返回記錄集。
•自定義函數,可以返回表變數。

•存儲過程,其返回值不能被直接引用。
•自定義函數,其返回值可以被直接引用。

•存儲過程,用 EXECUTE 語句執行。
•自定義函數,在查詢語句中調用。

『伍』 sql的關於exec

EXECUTE
執行標量值的用戶定義函數、系統過程、用戶定義存儲過程或擴展存儲過程。同時支持 Transact-SQL 批處理內的字元串的執行

若要喚醒調用函數,請使用 EXECUTE stored_procere 中描述的語法。

語法
執行存儲過程:

[ [ EXEC [ UTE ] ]
{
[ @return_status = ]
{ procere_name [ ;number ] | @procere_name_var
}
[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ]
[ ,...n ]
[ WITH RECOMPILE ]

執行字元串:

EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )

參數
@return_status

是一個可選的整型變數,保存存儲過程的返回狀態。這個變數在用於 EXECUTE 語句前,必須在批處理、存儲過程或函數中聲明過。

在用於喚醒調用標量值用戶定義函數時,@return_status 變數可以是任何標量數據類型。

procere_name

是擬調用的存儲過程的完全合法或者不完全合法的名稱。過程名稱必須符合標識符規則。有關更多信息,請參見使用標識符。無論伺服器的代碼頁或排序方式如何,擴展存儲過程的名稱總是區分大小寫。

用戶可以執行在另一資料庫中創建的過程,只要該用戶擁有此過程或有在該資料庫中執行它的適當的許可權。用戶可以在另一台運行 Microsoft® SQL Server™ 的伺服器上執行過程,只要該用戶有適當的許可權使用該伺服器(遠程訪問),並能在資料庫中執行該過程。如果指定了伺服器名稱但沒有指定資料庫名稱,SQL Server 會在用戶默認的資料庫中尋找該過程。

;number

是可選的整數,用於將相同名稱的過程進行組合,使得它們可以用一句 DROP PROCEDURE 語句除去。該參數不能用於擴展存儲過程。

在同一應用程序中使用的過程一般都以該方式組合。例如,在訂購應用程序中使用的過程可以 orderproc;1、orderproc;2 等來命名。DROP PROCEDURE orderproc 語句將除去整個組。在對過程分組後,不能除去組中的單個過程。例如,DROP PROCEDURE orderproc;2 是不允許的。有關過程組的更多信息,請參見 CREATE PROCEDURE。

@procere_name_var

是局部定義變數名,代表存儲過程名稱。

@parameter

是過程參數,在 CREATE PROCEDURE 語句中定義。參數名稱前必須加上符號 (@)。在以 @parameter_name = value 格式使用時,參數名稱和常量不一定按照 CREATE PROCEDURE 語句中定義的順序出現。但是,如果有一個參數使用 @parameter_name = value 格式,則其它所有參數都必須使用這種格式。

默認情況下,參數可為空。如果傳遞 NULL 參數值,且該參數用於 CREATE 或 ALTER TABLE 語句中不允許為 NULL 的列(例如,插入至不允許為 NULL 的列),SQL Server 就會報錯。為避免將 NULL 參數值傳遞給不允許為 NULL 的列,可以在過程中添加程序設計邏輯或採用默認值(使用 CREATE 或 ALTER TABLE 語句中的 DEFAULT 關鍵字)。

value

是過程中參數的值。如果參數名稱沒有指定,參數值必須以 CREATE PROCEDURE 語句中定義的順序給出。

如果參數值是一個對象名稱、字元串或通過資料庫名稱或所有者名稱進行限制,則整個名稱必須用單引號括起來。如果參數值是一個關鍵字,則該關鍵字必須用雙引號括起來。

如果在 CREATE PROCEDURE 語句中定義了默認值,用戶執行該過程時可以不必指定參數。如果該過程使用了帶 LIKE 關鍵字的參數名稱,則默認值必須是常量,並且可以包含 %、_、[ ] 及 [^] 通配符。

默認值也可以為 NULL。通常,過程定義會指定當參數值為 NULL 時應該執行的操作。

@variable

是用來保存參數或者返回參數的變數。

OUTPUT

指定存儲過程必須返回一個參數。該存儲過程的匹配參數也必須由關鍵字 OUTPUT 創建。使用游標變數作參數時使用該關鍵字。

如果使用 OUTPUT 參數,目的是在調用批處理或過程的其它語句中使用其返回值,則參數值必須作為變數傳遞(即 @parameter = @variable)。如果一個參數在 CREATE PROCEDURE 語句中不是定義為 OUTPUT 參數,則對該參數指定 OUTPUT 的過程不能執行。不能使用 OUTPUT 將常量傳遞給存儲過程;返回參數需要變數名稱。在執行過程之前,必須聲明變數的數據類型並賦值。返回參數可以是 text 或 image 數據類型以外的任意數據類型。

DEFAULT

根據過程的定義,提供參數的默認值。當過程需要的參數值沒有事先定義好的默認值,或缺少參數,或指定了 DEFAULT 關鍵字,就會出錯。

n

是佔位符,表示在它前面的項目可以多次重復執行。例如,EXECUTE 語句可以指定一個或者多個 @parameter、value 或 @variable。

WITH RECOMPILE

強制編譯新的計劃。如果所提供的參數為非典型參數或者數據有很大的改變,使用該選項。在以後的程序執行中使用更改過的計劃。該選項不能用於擴展存儲過程。建議盡量少使用該選項,因為它消耗較多系統資源。

@string_variable

是局部變數的名稱。@string_variable 可以是 char、varchar、nchar 或 nvarchar 數據類型,最大值為伺服器的可用內存。如果字元串長度超過 4,000 個字元,則把多個局部變數串聯起來用於 EXECUTE 字元串。有關系統提供的 SQL Server 數據類型更多的信息,請參見數據類型。

[N]'tsql_string'

是一個常量,tsql_string 可以是 nvarchar 或 varchar 數據類型。如果包含 N,則該字元串將解釋為 nvarchar 數據類型,最大值為伺服器的可用內存。如果字元串長度超過 4,000 個字元,則把多個局部變數串聯起來用於 EXECUTE 字元串。

注釋
如果過程名稱的前三個字元為 sp_,SQL Server 會在 Master 資料庫中尋找該過程。如果沒能找到合法的過程名稱,SQL Server 會尋找所有者名稱為 dbo 的過程。若要將存儲過程名稱解析為與系統存儲過程同名的用戶定義存儲過程,請提供一個完全合法的過程名稱。

參數可以通過利用 value 或 @parameter_name = value 來提供。參數不是事務的一個部分;因而如果事務中的參數值更改,且該事務在以後回滾,該參數值不會退回到以前的值。返回給調用方的值總是過程返回時的值。

當一個存儲過程調用另一個存儲過程時,會產生嵌套。當調用的過程開始執行時,嵌套級會增加,當調用過程執行結束時,嵌套級則會減少。嵌套級最高為32級,超過32級時,會導致整個調用過程鏈失敗。當前的嵌套級存儲在 @@NESTLEVEL 函數中。

SQL Server 目前使用返回值 0 到 -14 來表示存儲過程的執行狀態。值 –15 到 -99 留作後用。有關保留的返回狀態值的列表的更多信息,請參見 RETURN。

因為遠程存儲過程和擴展存儲過程不在事務的作用域中(除非在 BEGIN DISTRIBUTED TRANSACTION 語句中發出或者是和不同的配置選項一起使用),所以通過調用執行的命令不能回滾。有關更多信息,請參見系統存儲過程和 BEGIN DISTRIBUTED TRANSACTION。

當使用游標變數時,如果執行的過程傳遞一個分配有游標的游標變數,就會出錯。

在執行存儲過程時,如果語句是批處理中的第一個語句,則不一定要指定 EXECUTE 關鍵字。

使用帶字元串的 EXECUTE 命令
使用字元串串聯運算符 (+) 為動態執行創建長字元串。每個字元串表達式可以是 Unicode 與 non-Unicode 數據類型的混合。

盡管每個 [N] 'tsql_string' 或 @string_variable 不得超過 8,000 個位元組,SQL Server 語法分析器中對這種串聯只進行邏輯處理而不佔用物理內存。例如,該語句決不會生成長 16,000 個串聯起來的字元串:

EXEC('name_of_8000_char_string' + 'another_name_of_8000_char_string')

在 EXECUTE 語句執行前,不會編譯 EXECUTE 語句內的語句。

資料庫環境的更改只在 EXECUTE 語句結束前有效。例如,在這個例子的 EXEC 後,資料庫環境是 master:

USE master EXEC ("USE pubs") SELECT * FROM authors

許可權
存儲過程的 EXECUTE 許可權默認給該存儲過程的所有者,該所有者可以將此許可權轉讓給其他用戶。當遇到 EXECUTE 語句時,即使 EXECUTE 語句是在存儲過程中,也會檢查在 EXECUTE 字元串內使用該語句的許可權。當運行一個執行字元串的存儲過程時,系統會在執行該過程的用戶環境中,而不是在創建該過程的用戶環境中檢查許可權。但是,如果某用戶擁有兩個存儲過程,並且第一個過程調用第二個過程,則在第二個過程中不進行 EXECUTE 許可權檢查。

示例
A. 使用 EXECUTE 傳遞單個參數
showind 存儲過程需要參數 (@tabname),它是一個表的名稱。下面這個例子執行 showind 存儲過程,以 titles 為參數值。

說明 showind 存儲過程只是用來作為一個例子,pubs 資料庫並沒有此過程。

EXEC showind titles

在執行過程中變數可以顯式命名:

EXEC showind @tabname = titles

如果這是 isql 腳本或批處理中第一個語句,則 EXEC 語句可以省略:

showind titles

-或-

showind @tabname = titles

B. 使用多個參數與一個輸出參數
這個例子執行 roy_check 存儲過程,傳遞三個參數。第三個參數 @pc 是輸出參數。過程執行完後,返回變數可以從變數 @percent 得到。

說明 roy_check 存儲過程只是用作舉例,pubs 資料庫中並沒有此過程。

DECLARE @percent int
EXECUTE roy_check 'BU1032', 1050, @pc = @percent OUTPUT
SET Percent = @percent

C.使用帶一個變數的 EXECUTE 'tsql_string' 語句
這個例子顯示 EXECUTE 語句如何處理動態生成的、含有變數的字元串。這個例子創建 tables_cursor 游標來保存所有用戶定義表 (type = U) 的列表。

說明 此例子只用作舉例。

DECLARE tables_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = 'U'
OPEN tables_cursor
DECLARE @tablename sysname
FETCH NEXT FROM tables_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
/* A @@FETCH_STATUS of -2 means that the row has been deleted.
There is no need to test for this because this loop drops all
user-defined tables. */.
EXEC ('DROP TABLE ' + @tablename)
FETCH NEXT FROM tables_cursor INTO @tablename
END
PRINT 'All user-defined tables have been dropped from the database.'
DEALLOCATE tables_cursor

D.使用帶遠程存儲過程的 EXECUTE 語句
這個例子在遠程伺服器 SQLSERVER1 上執行 checkcontract 存儲過程,在 @retstat 中保存返回狀態,說明運行成功或失敗。

DECLARE @retstat int
EXECUTE @retstat = SQLSERVER1.pubs.dbo.checkcontract '409-56-4008'

E. 使用帶擴展存儲過程的 EXECUTE 語句
下例使用 xp_cmdshell 擴展存儲過程列出文件擴展名為 .exe 的所有文件的目錄。

USE master
EXECUTE xp_cmdshell 'dir *.exe'

F. 使用帶一個存儲過程變數的 EXECUTE 語句
這個例子創建一個代表存儲過程名稱的變數。

DECLARE @proc_name varchar(30)
SET @proc_name = 'sp_who'
EXEC @proc_name

G. 使用帶 DEFAULT 的 EXECUTE 語句
這個例子創建了一個存儲過程,過程中第一個和第三個參數為默認值。當運行該過程時,如果調用時沒有傳遞值或者指定了默認值,這些默認值就會賦給第一個和第三個參數。注意 DEFAULT 關鍵字有多種使用方法。

USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'proc_calculate_taxes' AND type = 'P')
DROP PROCEDURE proc_calculate_taxes
GO
-- Create the stored procere.
CREATE PROCEDURE proc_calculate_taxes (@p1 smallint = 42, @p2 char(1),
@p3 varchar(8) = 'CAR')
AS
SELECT *
FROM mytable

proc_calculate_taxes 存儲過程可以以多種組合方式執行:

EXECUTE proc_calculate_taxes @p2 = 'A'
EXECUTE proc_calculate_taxes 69, 'B'
EXECUTE proc_calculate_taxes 69, 'C', 'House'
EXECUTE proc_calculate_taxes @p1 = DEFAULT, @p2 = 'D'
EXECUTE proc_calculate_taxes DEFAULT, @p3 = 'Local', @p2 = 'E'
EXECUTE proc_calculate_taxes 69, 'F', @p3 = DEFAULT
EXECUTE proc_calculate_taxes 95, 'G', DEFAULT
EXECUTE proc_calculate_taxes DEFAULT, 'H', DEFAULT
EXECUTE proc_calculate_taxes DEFAULT, 'I', @p3 = DEFAULT

『陸』 sql動態查詢返回值的意義是什麼呢

@name只是返回一個標量值,它的有無並不影響sp那個擴展存儲過程的執行
如果你這個執行後,無論是否得到一個表集,都會將@name這個標量值輸出
當然需要在程序中額外的方法接收
當然如果你不想用這種方式,你就想用表集的形式接收也可以
sql語句拼接時,直接select name from即可,最後一句select @out_name去掉就可以了
沒有@name變數,相應的接收變數@out_name都去掉就好

這個sp_executesql存儲過程的輸出參數主要是為了解決拼接sql語句時,不能將拼接為字元的變數定義或輸出到外面的問題,舉個簡單的例子

比如你要查詢一個表的數量,那麼where條件是動態的,這時就必須使用動態拼接sql語句
而查詢得到的這個數量你需要賦值到一個變數中,用來進一步的計算或使用
這時,你用exec 執行的結果如何賦值到變數中呢?答案就是圖中所示的方法

『柒』 SQL 執行exec的返回值

直接改過程吧,你這個繞來繞去太麻煩。
這么改:
begin
declare @str varchar(4000)
set @str = 'select * from AAA'
exec @str
end
省得你還要取出來

『捌』 delphi ExecSql執行成功與失敗分別返回什麼值

ADOQuery.execSql,執行成功返回integer型數字「1」,失敗則為「0」了。

『玖』 取出exec後的返回值

完整使用exec利用存儲過程取出返回值,如
declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from alarm_Info '
exec sp_executesql @sqls,N'@a int output',@num output
print @num

熱點內容
redisphp機制 發布:2024-05-21 00:01:27 瀏覽:123
qq加密了怎麼解除繪圖 發布:2024-05-20 23:56:31 瀏覽:15
安卓怎麼轉蘋果app 發布:2024-05-20 23:40:04 瀏覽:133
phpcgi啟動 發布:2024-05-20 22:38:57 瀏覽:578
嵌入式存儲伺服器 發布:2024-05-20 22:14:55 瀏覽:395
sql分組條件 發布:2024-05-20 22:08:49 瀏覽:16
配網web伺服器一個IP地址 發布:2024-05-20 22:07:16 瀏覽:725
電腦板伺服器地址175 發布:2024-05-20 22:03:30 瀏覽:959
編譯靜態函數時 發布:2024-05-20 21:51:20 瀏覽:351
如何在別人的伺服器加模組 發布:2024-05-20 21:28:29 瀏覽:62