㈠ 在sql Server 語句中,如何將參數做為表名傳遞到查詢語句中
可以使用動態sql來查詢。
如:
declare@tablenamevarchar(20)
declare@sqlnvarchar(2000)
set@tablename='users'
set@sql=N'select*from'+@tablename+''
execsp_executesql@sql
結果
說明:
1、動態sql一般是這樣傳遞參數:set @sql=N'select * from ' +@tablename+ ''
2、執行sql時以這種方式:exec sp_executesql @sql
3、定義動態sql變數時,要用nvarchar類型
㈡ SQL 中存儲過程怎麼使用
一、簡單的儲存過程:
1、創建一個存儲過程
create procere GetUsers()
begin
select * from user;
end;12345
2、調用存儲過程
call GetUsers();12
3、刪除存儲過程
drop procere if exists GetUsers;
二、帶參數的存儲過程
1、MySql 支持 IN (傳遞給存儲過程) , OUT (從存儲過程傳出) 和 INOUT (對存儲過程傳入和傳出) 類型的參數 , 存儲過程的代碼位於 BEGIN 和 END 語句內 , 它們是一系列 SQL 語句 , 用來檢索值 , 然後保存到相應的變數 (通過指定INTO關鍵字) ;
2、下面的存儲過程接受三個參數 , 分別用於獲取用戶表的最小 , 平均 , 最大分數 , 每個參數必須具有指定的類型 , 這里使用十進制值(decimal(8,2)) , 關鍵字 OUT 指出相應的參數用來從存儲過程傳出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、調用此存儲過程 , 必須指定3個變數名(所有 MySql 變數都必須以@開始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、該調用並沒有任何輸出 , 只是把調用的結果賦給了調用時傳入的變數@minScore, @avgScore, @maxScore, 然後即可調用顯示該變數的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 參數 , 輸入一個用戶 id , 返回該用戶的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、調用存儲過程 :
call GetNameByID(1, @userName);
select @userName;123
㈢ VB SQL 存儲過程中使用參數作為工作表名
ALTER PROCEDURE [dbo].[AddNewRS]
@GPDM nvarchar(50),@GPCN nvarchar(50),@BName nvarchar(50)
AS
BEGIN
declare @sql nvarchar(2000)--定義變數@sql用於保存sql語句
set @sql =
'insert into ' + @BName + ' (GPDM,GPCN) values(' + @GPDM +',' + @GPCN+ ')'
exec(@sql)--執行sql語句
END
㈣ 關於給SQL存儲過程表名作為參數的問題
定義 一個變數
DECLARE @sql Varchar(max)
set @sql= 'SELECT * FROM' +@TableName+ 'where Row between' + @startRecordIndex +'and'+ @endRecordIndex
--最後再
exec @sql
純頁面手打,也不知道有沒有格式上錯誤,但意思已經表達的很清楚了
ALTER procere [dbo].[P_Pro_Women]
(@startRecordIndex int,
@endRecordIndex int,
@TableName varchar(50),
@BrandId int,
@sql Varchar(max))
as
begin
set @sql='SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ProctId desc)AS Row, * from '+@TableName +' where brandid ='+@BrandId+') where Row between '+ @startRecordIndex+' and '+@endRecordIndex
exec @sql
end
也不知道你是不是這個意思
㈤ sql存儲過程表名是參數,查詢這個表中的某個欄位,得到查詢結果
改為
declare @sql nvarchar(200)
set @sql='select code from '+@TableName
exec (@sql)
㈥ SQL 存儲過程中參數怎麼使用
存儲過程不支持的可以考慮使用用戶定義函數來實現,如: CREATE FUNCTION Order_Customer (@FirstName varchar(20),@LastName varchar(20)) RETURNS @Order_
㈦ SQL SERVER 中把表名作為參數傳遞給存儲過程後,怎麼把表中的數據賦值給存儲過程的變數
獲取結果不是這么寫的
可以用下面這種寫法:
DECLARE @T INT;
DECLARE @Sql NVARCHAR(200);
set @Sql = 'SELECT @T = START FROM ' + @TABLENAME + ' WHERE ...';
EXEC SP_EXECUTESQL @Sql, N'@T INT OUTPUT', @T OUTPUT;
㈧ sql數據匯總一張表 用sql語句或存儲過程怎麼寫
各公司的表是不同的名稱,沒有規律是吧?
如果有規律比如table1、table2……方便多了。
在存儲過程中,直接利用循環,查詢各表中的數據,累加到一個臨時數值上,然後將該數值插入到匯總表。具體實現,不同的資料庫有細微差別。
如果是沒有規律的,則需要將各表名作為存儲過程參數,比如用傳入字元串table1|table2|……|tablexxx|
然後在存儲過程中,解析該字元串,之後循環查詢。
存儲過程其實和c語言編程等編程語言實現語義上沒有多大區別,邏輯清楚了,多看幾個示例,就會弄了。
如果不想存儲過程,也可以用觸發器,在每張表上建一個觸發器,將所有記錄更新到匯總表。或者直接用視圖,將各表的結果直接匯總select
isnull(a.期初數,0)
+
isnull(b.期初數,0)
+
……
總期初數
from
table1
a
left
join
table
2
b
on
a.年=b.年
left
join
……
where
a.年='2011'
㈨ mysql 存儲過程 資料庫表名欄位作為參數傳遞給存儲過程的方法
直接將資料庫表名欄位作為字元類型傳到存儲過程中,存儲過程拼接sql語句,再用exec執行。例如:
CREATE PROCEDURE [proc_test]
(@tablename varchar(100))
WITH
EXECUTE AS CALLER
AS
declare @sql varchar(1000);
set @sql='select * from '+@tablename
exec(@sql)
GO
再直接執行 exec proc_test '學生表'
㈩ sql 存儲過程 IN參數表名
以下寫法供參考:
CREATE PROCEDURE `test1`(IN tab_name VARCHAR(40) )BEGIN
SET @t1 =CONCAT('SELECT * FROM ',tab_name );
PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;END $$