樓主,你是講表名作為參數(shù)傳進(jìn)去了嗎?“必須聲明表變量”好像是說(shuō)你得表名沒(méi)獲取到,沒(méi)有錯(cuò)誤信息和代碼不好確定,不過(guò)我跟你同樣的錯(cuò)誤,我的是表名獲取的時(shí)候用的#{tableName}改成${tableName}就好了。

創(chuàng)新互聯(lián)是專業(yè)的德清網(wǎng)站建設(shè)公司,德清接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行德清網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
-- ================================
-- 創(chuàng)建和使用自定義表類型
-- ================================
USE master
GO
-- ================================
-- 創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)
-- ================================
CREATE DATABASE demo
GO
-- ================================
-- 創(chuàng)建一個(gè)表
-- ================================
USE demo
GO
CREATE TABLE Customers
(
Id int NOT NULL,
Name char(10) NULL,
PRIMARY KEY (Id)
)
GO
USE demo
GO
-- ================================
-- 創(chuàng)建自定義表類型
-- ================================
CREATE TYPE dbo.CustomerTable AS TABLE
(
Id int NOT NULL,
Name char(10) NULL,
PRIMARY KEY (Id)
)
GO
-- =================================
-- 直接使用自定義表類型
-- =================================
DECLARE @c CustomerTable
INSERT INTO @c VALUES(1,'Xizhang')
SELECT * FROM @c
-- =================================
-- 在存儲(chǔ)過(guò)程中使用自定義表類型
-- =================================
CREATE PROC GetCustomers
(@c CustomerTable READONLY)
AS
INSERT Customers SELECT * FROM @c --將傳過(guò)來(lái)的參數(shù)(其實(shí)是一個(gè)表)的數(shù)據(jù)插入到Customers表里面去
-- =================================
-- 調(diào)用該存儲(chǔ)過(guò)程,一次性插入4行數(shù)據(jù)
-- =================================
DECLARE @temp CustomerTable
INSERT INTO @temp VALUES(7,'Xizhang')
INSERT INTO @temp VALUES(2,'Xizhang')
INSERT INTO @temp VALUES(3,'Xizhang')
INSERT INTO @temp VALUES(4,'Xizhang')
EXEC GetCustomers @c=@temp
SELECT * FROM Customers
-- =================================
-- 清理數(shù)據(jù)庫(kù)
-- =================================
USE master
GO
DROP DATABASE demo
GO
看起來(lái)不錯(cuò)對(duì)吧,但是你應(yīng)該馬上想到一個(gè)問(wèn)題,如果說(shuō)這個(gè)存儲(chǔ)過(guò)程要在客戶端代碼中調(diào)用,那么該怎么提供這個(gè)參數(shù)值呢?
using System.Data.SqlClient;
using System.Data;
class Program
{
static void Main(string[] args)
{
DataTable tb = GetData();
using (SqlConnection conn = new SqlConnection("server=sql2008;database=demo;integrated security=true"))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "GetCustomers";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@c", SqlDbType.Structured);//這個(gè)類型很關(guān)鍵
param.Value = tb;
cmd.Parameters.Add(param);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
Console.WriteLine("完成操作");
Console.Read();
}
private static DataTable GetData()
{
DataTable tb = new DataTable();
tb.Columns.Add("Id",typeof(int));
tb.Columns.Add("Name", typeof(string));
//添加100個(gè)客戶資料
for (int i = 0; i 100; i++)
{
DataRow row = tb.NewRow();
row[0] = i;
row[1] = "Name " + i.ToString();
tb.Rows.Add(row);
}
return tb;
}
}
局部變量用一個(gè)@標(biāo)識(shí),全局變量用兩個(gè)@(常用的全局變量一般都是已經(jīng)定義好的);
申明局部變量語(yǔ)法:declare @變量名 數(shù)據(jù)類型;例如:declare @num int;
賦值:有兩種方法式(@num為變量名,value為值)
set @num=value; 或 select @num=value;
如果想獲取查詢語(yǔ)句中的一個(gè)字段值可以用select給變量賦值,如下:
select @num=字段名 from 表名 where ……
全局變量是系統(tǒng)預(yù)定義的,返回一些系統(tǒng)信息,全局變量以兩個(gè)at(@)開(kāi)頭。
select?top?1000
ROW_NUMBER()?OVER?(ORDER?BY?a.object_id)?AS?No,?
a.name?AS?表名,
isnull(g.[value],'-')?AS?說(shuō)明
from
sys.tables?a?left?join?sys.extended_properties?g
on?(a.object_id?=?g.major_id?AND?g.minor_id?=?0)
No?表名?說(shuō)明
1?test_table?測(cè)試表
2?test_main?-
參數(shù)定義
單個(gè)參數(shù)
1 CREATE PROCEDURE HelloWorld1
2 @UserName VARCHAR(10)
3 AS
4 BEGIN
5 PRINT 'Hello' + @UserName + '!';
6 END;
7 go
1 DECLARE @RC int;
2 EXECUTE @RC = HelloWorld1 'Edward' ;
3 PRINT @RC;
4 go
HelloEdward!
IN、OUT、IN OUT
注:
SQL Server 的 OUTPUT 需要寫(xiě)在變量數(shù)據(jù)類型后面。
SQL Server 沒(méi)有 IN OUT 關(guān)鍵字
OUTPUT 已經(jīng)相當(dāng)于 IN OUT 了。
1 CREATE PROCEDURE HelloWorld2
2 @UserName VARCHAR(10),
3 @OutVal VARCHAR(10) OUTPUT,
4 @InoutVal VARCHAR(10) OUTPUT
5 AS
6 BEGIN
7 PRINT 'Hello ' + @UserName + @InoutVal + '!';
8 SET @OutVal = 'A';
9 SET @InoutVal = 'B';
10 END;
11 go
1
2 DECLARE @RC int, @OutVal VARCHAR(10), @InoutVal VARCHAR(10);
3 BEGIN
4 SET @InoutVal = '~Hi~';
5 EXECUTE @RC = HelloWorld2 'Edward', @OutVal OUTPUT, @InoutVal OUTPUT;
6 PRINT @RC;
7 PRINT '@OutVal=' + @OutVal;
8 PRINT '@InoutVal=' + @InoutVal;
9 END
10 go
Hello Edward~Hi~!
@OutVal=A
@InoutVal=B
參數(shù)的默認(rèn)值
1 CREATE PROCEDURE HelloWorld3
2 @UserName VARCHAR(10),
3 @Val1 VARCHAR(20) = ' Good Moning,',
4 @Val2 VARCHAR(20) = ' Nice to Meet you'
5 AS
6 BEGIN
7 PRINT 'Hello ' + @UserName + @Val1 + @Val2 + '!';
8 END;
9 go
1
2 DECLARE @RC int;
3 BEGIN
4 EXECUTE @RC = HelloWorld3 'Edward';
5 PRINT @RC;
6 EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,';
7 PRINT @RC;
8 EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,', ' Bye';
9 PRINT @RC;
10 END
11 go
Hello Edward Good Moning, Nice to Meet you!
Hello Edward Good Night, Nice to Meet you!
Hello Edward Good Night, Bye!
指定參數(shù)名稱調(diào)用
此部分使用 “參數(shù)默認(rèn)值”那一小節(jié)的存儲(chǔ)過(guò)程。
用于說(shuō)明當(dāng)最后2個(gè)參數(shù)是有默認(rèn)的時(shí)候,如何跳過(guò)中間那個(gè)。
1 DECLARE @RC int;
2 BEGIN
3 EXECUTE @RC = HelloWorld3 'Edward';
4 PRINT @RC;
5 EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,';
6 PRINT @RC;
7 EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,', @Val2=' Bye';
8 PRINT @RC;
9 EXECUTE @RC = HelloWorld3 'Edward', @Val2=' HeiHei ';
10 PRINT @RC;
11 END
12 go
Hello Edward Good Moning, Nice to Meet you!
Hello Edward Good Night, Nice to Meet you!
Hello Edward Good Night, Bye!
Hello Edward Good Moning, HeiHei !
命名變量要加@
表變量也不例外。
意思就是說(shuō),讓計(jì)算機(jī)知道它是個(gè)變量,別當(dāng)列名或者關(guān)鍵字給訪問(wèn)了
文章標(biāo)題:sqlserver聲明表,sql server說(shuō)明
轉(zhuǎn)載來(lái)于:http://chinadenli.net/article19/dsgjhdh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、企業(yè)網(wǎng)站制作、ChatGPT、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)