帶引數的儲存過程sp executesql

2021-06-15 21:55:12 字數 2519 閱讀 7376

示例:

exec sp_executesql

n'select role.userid from role where role.userid = @paramuserid'

, n'@paramuserid nvarchar(4000)'

, @paramuserid = n'123457'

說明:

sp_executesql

執行可以多次重用或動態生成的transact-sql 語句或批處理。transact-sql 語句或批處理可以包含嵌入引數。

語法 sp_executesql [@stmt =] stmt

[

]

引數 stmt

必須是可以隱式轉換為ntext 的unicode 常量或變數。不允許使用更複雜的unicode 表示式(例如使用+ 運算子串聯兩個字串)。不允許使用字元常量。如果指定常量,則必須使用n 作為字首。例如,unicode 常量n'sp_who' 是有效的,但是字元常量'sp_who' 則無效。字串的大小僅受可用資料庫伺服器記憶體限制。

當stmt中有引數時,必須有對應的引數型別申明和指定的引數值:常見引數型別有nvarchar(4000)、int

(4000是nvarchar的最大值)

n'@parameter_namedata_type [,...n] [out]'

如果該引數用於儲存返回值,則在引數型別後加乙個關鍵字

『out

』,如:

declare @user varchar(1000)

declare @motable varchar(20)

select @motable = 'mt_10'declare @sql nvarchar(4000)

set @sql='select @user = count(distinct userid)from '+@motable

exec sp_executesql @sql

,n'@user varchar(1000) out'--

表示@sql中的語句包含了乙個輸出引數

,@user out--

和呼叫儲存過程差不多,指定輸出引數值

print @user

字串,其中包含已嵌入到stmt 中的所有引數的定義。該字串必須是可以隱式轉換為ntext 的unicode 常量或變數。每個引數定義均由引數名和資料型別組成。n 是表明附加引數定義的佔位符。stmt 中指定的每個引數都必須在@params 中定義。如果stmt 中的transact-sql 語句或批處理不包含引數,則不需要@params。該引數的預設值為null。

[@param1 =] 'value1'

引數字串中定義的第乙個引數的值。該值可以是常量或變數。必須為stmt 中包含的每個引數提供引數值。如果stmt 中包含的transact-sql 語句或批處理沒有引數,則不需要值。

n 附加引數的值的佔位符。這些值只能是常量或變數,而不能是更複雜的表示式,例如函式或使用運算子生成的表示式。

返回**值 0

(成功)或1(失敗)

結果集

從生成sql字串的所有sql 語句返回結果集。

在**中的使用:

private

string

strsql = "exec sp_executesql

n'select role.userid from role where role.userid = @paramuserid'

, n'@paramuserid nvarchar(4000)'

, @paramuserid = n'123457'";

private

sqlconnection m_objcon = null;

private

sqlcommand m_objcmd = null;

m_objcon = new sqlconnection(

"datasource=10.69.0.13;userid=sa;password=sa

");

m_objcon.open();

m_objcmd = m_objcon.createcommand();

m_objcmd.commandtext = strsql;

m_objcmd.parameters.clear();

if(txtuserid.text

== null)

else

sqldataadapter

tempdad

= new sqldataadapter(m_objcmd);

dataset objd

s= new dataset();

tempdad

.fill(objd

s);

int irowcount =

objd

s.tables[0].rows.count;

儲存過程帶in引數

set ansi nulls on set quoted identifier on goalter procedure dbo testlist userid nvarchar 4000 asdeclare search array nvarchar 100 begin set search ar...

oracle儲存過程 帶引數的儲存過程

帶引數的儲存過程 舉例 為指定的員工漲100元的工資,列印漲前和漲後的工資 如果帶參,需要指定是輸入引數還是輸出引數 create orreplace procedure raisesalary eno in number as 定義乙個變數儲存漲前的薪水,引用emp中sal的型別作為psal的型別...

處理帶引數的儲存過程

儲存過程 create procedure customer select country nvarchar 15 asselect customerid,companyname,contactname from customers where country country go.aspx cs ...