sqlserver声明表,sql server说明

java动态连接sql数据库的时候com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明表变量 "@P0"。

楼主,你是讲表名作为参数传进去了吗?“必须声明表变量”好像是说你得表名没获取到,没有错误信息和代码不好确定,不过我跟你同样的错误,我的是表名获取的时候用的#{tableName}改成${tableName}就好了。

创新互联是专业的德清网站建设公司,德清接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行德清网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

sqlserver怎么操作自定义表类型

-- ================================

-- 创建和使用自定义表类型

-- ================================

USE master

GO

-- ================================

-- 创建测试数据库

-- ================================

CREATE DATABASE demo

GO

-- ================================

-- 创建一个表

-- ================================

USE demo

GO

CREATE TABLE Customers

(

Id int NOT NULL,

Name char(10) NULL,

PRIMARY KEY (Id)

)

GO

USE demo

GO

-- ================================

-- 创建自定义表类型

-- ================================

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

-- =================================

-- 在存储过程中使用自定义表类型

-- =================================

CREATE PROC GetCustomers

(@c CustomerTable READONLY)

AS

INSERT Customers SELECT * FROM @c --将传过来的参数(其实是一个表)的数据插入到Customers表里面去

-- =================================

-- 调用该存储过程,一次性插入4行数据

-- =================================

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

-- =================================

-- 清理数据库

-- =================================

USE master

GO

DROP DATABASE demo

GO

看起来不错对吧,但是你应该马上想到一个问题,如果说这个存储过程要在客户端代码中调用,那么该怎么提供这个参数值呢?

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);//这个类型很关键

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个客户资料

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;

}

}

SQLserver 怎么声明变量?

局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);

申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;

赋值:有两种方法式(@num为变量名,value为值)

set @num=value; 或 select @num=value;

如果想获取查询语句中的一个字段值可以用select给变量赋值,如下:

select @num=字段名 from 表名 where ……

全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。

SQLServer如何获取所有表及表的说明

select top 1000

ROW_NUMBER() OVER (ORDER BY a.object_id) AS No, 

a.name AS 表名,

isnull(g.[value],'-') AS 说明

from

sys.tables a left join sys.extended_properties g

on (a.object_id = g.major_id AND g.minor_id = 0)

No 表名 说明

1 test_table 测试表

2 test_main -

SQLServer跨数据库执行存储,并且这个存储带有表类型参数,需要怎么声明传入?

参数定义

单个参数

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 需要写在变量数据类型后面。

SQL Server 没有 IN OUT 关键字

OUTPUT 已经相当于 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

参数的默认值

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!

指定参数名称调用

此部分使用 “参数默认值”那一小节的存储过程。

用于说明当最后2个参数是有默认的时候,如何跳过中间那个。

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 !

MySQL里面声明表变量的问题

命名变量要加@

表变量也不例外。

意思就是说,让计算机知道它是个变量,别当列名或者关键字给访问了


当前文章:sqlserver声明表,sql server说明
转载注明:http://scjbc.cn/article/dsgjhdh.html

其他资讯