程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 行帶嵌入參數的sql——sp_executesql

行帶嵌入參數的sql——sp_executesql

編輯:關於SqlServer
通常執行sql語句,大家用的都是exec,exec功能強大,但不支持嵌入參數,sp_executesql解決了這個問題。抄一段sqlserver幫助:

sp_executesql

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

語法

sp_executesql [@stmt =] stmt
[
{, [@params =] N'@parameter_name data_type [,...n]' }
{, [@param1 =] 'value1' [,...n] }
]

參數

[@stmt =] stmt

包含 Transact-SQL 語句或批處理的 Unicode 字符串,stmt 必須是可以隱式轉換為 ntext 的 Unicode 常量或變量。不允許使用更復雜的 Unicode 表達式(例如使用 + 運算符串聯兩個字符串)。不允許使用字符常量。如果指定常量,則必須使用 N 作為前綴。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 則無效。字符串的大小僅受可用數據庫服務器內存限制。

stmt 可以包含與變量名形式相同的參數,例如:

N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'







stmt 中包含的每個參數在 @params 參數定義列表和參數值列表中均必須有對應項。

[@params =] N'@parameter_name data_type [,...n]'

字符串,其中包含已嵌入到 stmt 中的所有參數的定義。該字符串必須是可以隱式轉換為 ntext 的 Unicode 常量或變量。每個參數定義均由參數名和數據類型組成。n 是表明附加參數定義的占位符。stmt 中指定的每個參數都必須在 @params 中定義。如果 stmt 中的 Transact-SQL 語句或批處理不包含參數,則不需要 @params。該參數的默認值為 NULL。

[@param1 =] 'value1'

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

n

附加參數的值的占位符。這些值只能是常量或變量,而不能是更復雜的表達式,例如函數或使用運算符生成的表達式。

返回代碼值

0(成功)或 1(失敗)

結果集

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


例子(感謝鄒建提供)

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 --為變量賦值

--執行@sql中的語句
exec sp_executesql @sql
,N'@user varchar(1000) out' --表示@sql中的語句包含了一個輸出參數
,@user out --和調用存儲過程差不多,指定輸出參數值

print @user


本例中,@moTable 為嵌入參數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved