當前位置:首頁 » 編程語言 » sqlserver動態參數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver動態參數

發布時間: 2023-01-13 16:49:23

sqlserver動態表名查詢

因為表名是根據月份來創建的,所以創建視圖需要利用參數作為表名進行查詢

可以再加一個語句判斷表是否存在

② C#怎麼調用sqlserver的自定義函數

sql server 自定義函數的使用
自定義函數

用戶定義自定義函數像內置函數一樣返回標量值,也可以將結果集用表格變數返回
用戶自定義函數的類型:
標量函數:返回一個標量值
表格值函數{內聯表格值函數、多表格值函數}:返回行集(即返回多個值)

1、標量函數
Create function 函數名(參數)
Returns 返回值數據類型
[with {Encryption | Schemabinding }]
[as]
begin
SQL語句(必須有return 變數或值)

End

Schemabinding :將函數綁定到它引用的對象上(註:函數一旦綁定,則不能刪除、修改,除非刪除綁定)


Create function AvgResult(@scode varchar(10))
Returns real
As
Begin
Declare @avg real
Declare @code varchar(11)
Set @code=@scode + 『%』
Select @avg=avg(result) from LearnResult_jiali
Where scode like @code
Return @avg
End

執行用戶自定義函數
select 用戶名。函數名 as 欄位別名
select dbo.AvgResult(『s0002』) as result

用戶自定義函數返回值可放到局部變數中,用set ,select,exec賦值
declare @avg1 real ,@avg2 real ,@avg3 real
select @avg1= dbo.AvgResult(『s0002』)
set @avg2= dbo.AvgResult(『s0002』)
exec @avg3= dbo.AvgResult 『s0002』
select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3

函數引用

create function code(@scode varchar(10))
returns varchar(10)
as
begin
declare @ccode varchar(10)
set @scode = @scode + 『%』
select @ccode=ccode from cmessage
where ccode like @scode
return @ccode
end

select name from class where ccode = dbo.code(『c001』)

2、表格值函數
a、 內聯表格值函數
格式:
create function 函數名(參數)
returns table
[with {Encryption | Schemabinding }]
as
return(一條SQL語句)

create function tabcmess(@code varchar(10))
returns table
as
return(select ccode,scode from cmessage where ccode like @ccode)

b、 多句表格值函數
create function 函數名(參數)
returns 表格變數名table (表格變數定義)
[with {Encryption | Schemabinding }]
as
begin
SQL語句
end

多句表格值函數包含多條SQL語句,至少有一條在表格變數中填上數據值
表格變數格式
returns @變數名 table (column 定義| 約束定義 [,…])
對表格變數中的行可執行select,insert,update,delete , 但select into 和 insert 語句的結果集是從存儲過程插入。

Create function tabcmessalot (@code varchar(10))
Returns @ctable table(code varchar(10) null,cname varchar(100) null)
As
Begin
Insert @ctable
Select ccode,explain from cmessage
Where scode like @code
return
End

Select * from tabcmessalot(『s0003』)

來自:http://hi..com/datachina/blog/item/801def0366c4e7ea09fa9344.htmlC#調用SQL自定義函數返回值

代碼
1 --SQL自定義函數:
2
3 CREATE FUNCTION [GetProjectID] (@headStr nvarchar(10),@date datetime)
4 )
5
6 RETURNS NVARCHAR(200)
7
8 AS
9
10 BEGIN
11
12 --不能在自定義函數中用INSERT INTO
13
14 --insert into emos_cust(cust_name,dates)values(
15
16 --@headStr,@date
17
18 --)
19
20 return 'TEST BY HANSHU'
21 END
代碼
1 /// <summary>
2 /// 獲取項目文件編號 塗聚文
3 /// </summary>
4 private void FileNo()
5 {
6
7 SqlConnection conn = new SqlConnection(connectionString);
8 string strSql = "GetProjectID"; //自定SQL函數
9 SqlCommand cmd = new SqlCommand(strSql, conn);
10 cmd.CommandType = CommandType.StoredProcere;
11 cmd.Parameters.Add("@headStr", SqlDbType.NVarChar).Value = "ZQ3"; //輸入參數
12 cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = System.DateTime.Now.ToShortDateString(); //輸入參數
13 cmd.Parameters.Add("@returnString", SqlDbType.NVarChar);
14 cmd.Parameters["@returnString"].Direction = ParameterDirection.ReturnValue; //返回參數
15 try
16 {
17 conn.Open();
18 object o= cmd.ExecuteScalar();
19
20 this.txtAFileNO.Text = cmd.Parameters["@returnString"].Value.ToString();
21
22 //Response.Write("");
23
24 }
25 catch (Exception ex)
26 {
27
28 this.txtAFileNO.Text = ex.Message;
29
30 }
31 finally
32 {
33
34 if (!(conn.State == ConnectionState.Closed))
35 {
36
37 conn.Close();
38
39
40 }
41
42 }
43
44
45 }

③ 如何支持動態拼接SQL的參數化查詢求解答

remarkvarchar(100))go--寫入部分測試數據insertintooswica_test_table_1select1,
'oswica',''insertintooswica_test_table_1select2,
'stone',''insertintooswica_test_table_1select3,
'nana',''insertintooswica_test_table_1select4,
'nana',''go--建立存儲過程createprocoswica_proc_querytestdata(@whereSqlnvarchar(max),
@paramNameListnvarchar(max),
@paramValueListnvarchar(max))asbegindeclare@exesqlnvarchar(max)
--生成查詢語句set@exesql='EXECsp_executesqlN'
'select*fromoswica_test_table_1'
+@whereSql+''
',N'''+@paramNameList+''
','
+@paramValueList+''
print@exesqlexec(@exesql)endgo--執行存儲過程execoswica_proc_querytestdataN
'whereid=@idandname=@name',N
'@idint,@namevarchar(50)',N
'@id=1,@name=''oswica'''go--結果
--EXECsp_executesqlN'select*fromoswica_test_table_1whereid=@idandname=@name',N'@idint,@namevarchar(50)',@id=1,@name='oswica'
--idnameremark
-------------------------------------------------------------------------------------------------------------------------------------------------------------------1oswica--說明
--實際上我們不推薦直接在存儲過程中這么使用。因為這里還是存在執行代碼裡面有拼接sql的情況。
--最好的辦法是在程序代碼裡面動態拼接好然後使用參數方式動態的根據實際參數個數傳入參數,已
--實現即能夠兼容參數化查詢又能夠拼接字元串。----建議
--按照上面的說法,我們可以拼接如下sql:
--select*fromoswica_test_table_1whereid=@idandname=@name
--然後按照拼接的參數個數使用SqlCommand的Parameters動態的添加2個參數:@id和@name來達到
--目的。而在編程語言中實現動態添加參數相對比較容易,或者通過實現sqlserver的CLR存儲過程來
--達到這一目的。

④ SqlServer 創建表命令中的參數——TEXTIMAGE_ON

在使用SqlServer創建表時會遇到一些參數,比如PAD_INDEX=OFF,TEXTIMAGE_ON等等,這里把這些參數的含義做一個小結,在使用時避免出錯。下面是創建表的腳本

首先說一下TEXTIMAGE_ON [PRIMARY],這個表中有一個大數據欄位[Json] nvarchar ,TEXTIMAGE_ON 的作用是將列存儲在指定文件組中,如果沒有指定 TEXTIMAGE_ON,則大數據列將與表存儲在同一文件組中。如果表中沒有大數據欄位,使用這個參數會報錯:

⑤ sqlserver2000 存儲過程參數如何用動態日期。

只能想到這種方法了:
declare @dateid datetime
set @dateid = getdate()
exec _test @dateid

⑥ 什麼叫動態參數

動態參數是指參數個數、類型在定義時均是固定不變的,可根據需要在執行時傳入!
例如:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class BaseDao {
public Connection con;
public PreparedStatement pstmt;
public ResultSet rs;
/**
* 開庫
*/
public void open(){
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=FinancingDB","sa","sa");
} catch (Exception e) {
System.out.println("開庫錯誤:"+e.getMessage());
}
}

/**
* 關庫
*/
public void close(){
try {
if(rs!=null)
rs.close();
if(pstmt!=null)
pstmt.close();
if(con!=null)
con.close();
} catch (Exception e) {
System.out.println("關庫錯誤:"+e.getMessage());
}
}
/**
* 執行增刪改
* @param sql
* @param params
* @return
*/
public int executeUpdate(String sql,Object...params){
int row=0;
try {
open();
pstmt=con.prepareStatement(sql);
if(params!=null && params.length>0){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
}

row=pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("執行增刪改錯誤:"+e.getMessage());
} finally{
close();
}
return row;
}
}
public class UserDao extends BaseDao{
public int addUser(User user){

String sql="insert into Users values(?,?,?,?,?)";

return super.executeUpdate(sql,user.getName(),user.getPass(),user.getSex(),user.getAge(),user.getMail();

}
public int deleteUser(int id){
String sql="delete Users from userid=?";

return super.executeUpdate(sql,id);

}
}

⑦ SqlServer可以把查詢條件做成參數嗎

不可以直接運行,你的方式只能通過拼接語句執行動態sql
exec('Select * From table Where '+@Condition)

⑧ 存儲過程變數中存儲SQL語句被截斷的問題

樓主用的 什麼資料庫

mysql一般先拼接好SQL,再執行,如下:
set conditions = "select * from table where 1 ";
set conditions = concat(conditions," and id=",1);
set @sql = conditions;

sqlserver一般做拼接的話,如下:
set @sql = 'select * FROM tab where name = @name'

⑨ vb 對sqlserver 採用SQL語句進行動態創建欄位

沒用過VB,不過可以參考下。

  1. 首先數據表wxl應該提前創建好,不論是在資料庫先創建,還是在VB中動態創建

  2. 數據表的欄位是通過VB的MSFlexGrid上給出的欄位,那麼欄位名和類型就可以作為存儲過程的參數。sqlserver中用動態SQL執行alter table wxladd 列名來增加列,比如:

--這里只把欄位名作為參數,還要自己修改為存儲過程
declare@c1varchar(10)
declare@sqlvarchar(100)
set@c1='userName'
set@sql='altertablestudentadd'+@c1+'varchar(10)'
exec(@sql)
go
select*fromstudent

⑩ SQLSERVER里的動態sql語句最多2個輸出參數嗎

--買課人數:當日買課人數,本周買課人數,當月買課人數,當季買課人數
ALTER PROC [dbo].[Report_CustomerClassCourseOrder_BuyClass_SP]
@FreeData DATE ,
@FranchiseeID INT ,
@DayBuyClass INTEGER OUTPUT ,
@SumDayBuyClass INTEGER OUTPUT ,
@WeekBuyClass INTEGER OUTPUT ,
@SumWeekBuyClass INTEGER OUTPUT ,
@AprilBuyClass INTEGER OUTPUT ,
@SumAprilBuyClass INTEGER OUTPUT ,
@QuarterBuyClass INTEGER OUTPUT ,
@SumQuarterBuyClass INTEGER OUTPUT,
@YesterdayBuyClass INTEGER OUTPUT, ---昨天
@SumYesterdayBuyClass INTEGER OUTPUT, ---昨天
@LastweekBuyClass INTEGER OUTPUT,--Last week上周
@SumLastweekBuyClass INTEGER OUTPUT,--Last week上周
@LastmonthBuyClass INTEGER OUTPUT,--上月
@SumLastmonthBuyClass INTEGER OUTPUT,--上月
@LastquarterBuyClass INTEGER OUTPUT,--上季度
@SumLastquarterBuyClass INTEGER OUTPUT--上季度
AS

你看這有幾個了