操作命令
启动后默认占用1433端口。windows+r后输入cmd,正常进入命令行后如下执行,参考网站:sqlserver 命令行的使用_命令行使用sqlserver-CSDN博客
数据类型
SQL Server 支持多种数据类型,包括整数、浮点数、字符、日期、文本、货币、位(布尔型)、二进制等。
- 整数类型:如 INT、SMALLINT、BIGINT 等,用于存储整数值,范围从-2^31(约-20亿)到2^31-1(约20亿)。
- 浮点数类型:如 FLOAT、REAL,用于存储小数或近似数值。
- 字符类型:如 NVARCHAR、VARCHAR、CHAR,用于存储字符串。
- 日期和时间类型:如 DATE、TIME、DATETIME、DATETIMEOFFSET、TIMESTAMP,用于存储日期和时间信息。
- 文本类型:如 TEXT、NTEXT,用于存储大量文本数据。
- 货币类型:如 MONEY、SMALLMONEY,专门用于金融计算。
- 位类型:BIT,相当于布尔类型,用于存储真/假值。
- 二进制类型:如 BINARY、VARBINARY,用于存储二进制数据。
此外,SQL Server 还支持一些其他特定用途的数据类型,如 UNIQUEIDENTIFIER、XML、HIERARCHYID、CURSOR、SQL_VARIANT 和 CLR 类型等。
数据库命令
# go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go),每个被GO分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。
go
# 查看database中有哪些表
use my_db;
select * from sys.tables;
-- 列名group与命令名重复,所以用[group]
-- DATEDIFF以秒为单位计算起始时间Time到结束时间ResumeTime的总时间到date_diff
SELECT priority,[group],Time,DATEDIFF(MINUTE, Time, ResumeTime) as date_diff, description
FROM BackMessage.dbo.Messages
where ResumeTime is not null order by date_diff desc;
-- 判断表是否存在BackMessage
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'BackMessage')
BEGIN
PRINT '数据库存在'
END
ELSE
BEGIN
PRINT '数据库不存在'
END
-- 数据库不存在则创建
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'BackMessage')
BEGIN
CREATE DATABASE BackMessage
END
-- 数据库中表是否存在,不存在就创建该表,其中ID为自增,INFORMATION_SCHEMA
IF NOT EXISTS (SELECT * FROM BackMessage.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'BoatPathInfo')
BEGIN
PRINT '表不存在'
CREATE TABLE BackMessage.dbo.BoatPathInfo (
Id INT PRIMARY KEY IDENTITY(1,1) not null,
OperationTime datetime,
EquipmentName nvarchar(50),
Description nvarchar(200),
RecipeTotalTime nvarchar(200)
)
END
else
begin
print '表已经存在'
end
-- 查看有哪些数据库
SELECT name FROM sys.databases;
-- 查询对应数据库中有哪些表
USE BackMessage;
GO
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
-- 删除表
DROP TABLE BackMessage.dbo.BoatPathInfo;
-- 查询前三个
SELECT TOP 3 * FROM 表名;
-- 我的查询第一个名代码,这是调试软件中代码,C#中不需要[xx]
select top 1 * from [BackMessage].[dbo].[BoatPathInfo] order by OperationTime desc;
-- 查询指定时间范围一类
SELECT
MIN(rEnergyFw1) AS FirstData1, MAX(rEnergyFw1) AS LastData1,
MIN(rEnergyFw2) AS FirstData2, MAX(rEnergyFw2) AS LastData2,
MIN(totalEnergyFw) AS FirstData1, MAX(totalEnergyFw) AS LastData3,
MAX(rEnergyFw1) - MIN(rEnergyFw1) as fw1,
MAX(rEnergyFw2) - MIN(rEnergyFw2) as fw2,
MAX(totalEnergyFw) - MIN(totalEnergyFw) as totalFw
FROM [TPM].[dbo].[ElectricMeter]
WHERE update_time between '2024/6/1 00:00:00' and '2024/8/8 12:14:39';
-- 月份自己递增,查询每月用电数据
DECLARE @StartDate DATE = '2024-03-01'; -- 起始日期
DECLARE @EndDate DATE = '2024-09-01'; -- 结束日期
DECLARE @CurrentDate DATE = @StartDate; -- 当前日期
DECLARE @MonthsToIncrement INT = 6; -- 递增的月份数
WHILE @CurrentDate <= @EndDate
BEGIN
-- 在这里执行你的查询操作,例如:
SELECT @CurrentDate,
MAX(rEnergyFw1) - MIN(rEnergyFw1) as fw1,
MAX(rEnergyFw2) - MIN(rEnergyFw2) as fw2,
MAX(totalEnergyFw) - MIN(totalEnergyFw) as totalFw
FROM [TPM].[dbo].[ElectricMeter]
WHERE update_time between @CurrentDate and DATEADD(MONTH, 1, @CurrentDate);
-- 递增一个月
SET @CurrentDate = DATEADD(MONTH, 1, @CurrentDate);
END
代码使用
- 引用System.Data.SqlClient;和System.Data;
- trusted_connection=true表示Integrated Security=SSPI; 如果连接字符串中不存在,则需要在连接字符串中指定userid和password: server=yourservername;database=yourdatabase;user id=YourUserID;password=password
- SqlConnection连接;SqlDataAdapter适配使用其函数Fill填充到DataTable中,DataTable可以通过XY行列纵列读写
//引入命名空间
using System.Data.SqlClient;
using System.Data;
using System.Data.SQLite;
using System.Diagnostics;
using EntDll;
using System.Collections.Specialized;
class MainClass
{
// m_sqlServer.Connect("server=127.0.0.1;User Id=sa;Password=123456;database=TPM");
public static string MessConString = "server=127.0.0.1;Trusted_Connection=SSPI;database=Message"; //"server=127.0.0.1;uid=sa;pwd=123456;database=Message";Environment
public static void Main()
{
string cmd = "select * from Messages";
DataTable dt = new DataTable();
try
{
using (SqlConnection cn = new SqlConnection(MessConString))
{
cn.Open(); //cn为连接对象
using (SqlDataAdapter madapter = new SqlDataAdapter(cmd, cn))
{
int count = madapter.Fill(dt);
cn.Close();
madapter.Dispose();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
Console.WriteLine(dt.Rows[i][j].ToString() + " ");
}
Console.WriteLine();
}
Console.WriteLine("数据库读取完毕");
}
}
自动创建数据库和数据表
using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Forms;
string BackBoatConString = "server=127.0.0.1;Trusted_Connection=SSPI;";
// 初始化数据库和表
bool ok;
ok = SqlHelper.CreateDataBase(BackBoatConString, "BackMessage");
// ID、操作时间、设备名、描述、配方时长
string tableParas = "Id INT PRIMARY KEY IDENTITY(1,1) not null,\r\n OperationTime datetime,\r\n " +
"EquipmentName nvarchar(50),\r\n Description nvarchar(200),\r\n RecipeTotalTime nvarchar(200)";
ok &= SqlHelper.CreateTable(BackBoatConString, "BackMessage", "BoatPathInfo", tableParas);
if (!ok)
return;
/// <summary>
/// 创建数据库
/// </summary>
/// <param name="connectStr">Sqlserver连接命令</param>
/// <param name="databaseName">库名</param>
/// <returns></returns>
public static bool CreateDataBase(string connectStr, string databaseName)
{
string cmd = "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '" + databaseName + @"')
BEGIN
CREATE DATABASE " + databaseName +
"\r\nEND";
try
{
using (SqlConnection cn = new SqlConnection(connectStr))
{
cn.Open(); //cn为连接对象
using (SqlCommand sqlCmd = new SqlCommand(cmd, cn))
{
sqlCmd.ExecuteNonQuery();
}
cn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "数据库创建失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
return true;
}
// 创建表,对应连接地址,数据库名,表名,参数内容
public static bool CreateTable(string connectStr, string databaseName, string tableName, string paras)
{
string cmd = "IF NOT EXISTS (SELECT * FROM " + databaseName +
".INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '" + tableName + @"')
BEGIN
CREATE TABLE " + databaseName + ".dbo." + tableName + "(\r\n" + paras + @" )
END";
try
{
using (SqlConnection cn = new SqlConnection(connectStr))
{
cn.Open(); //cn为连接对象
using (SqlCommand sqlCmd = new SqlCommand(cmd, cn))
{
sqlCmd.ExecuteNonQuery();
}
cn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "数据表创建失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
return true;
}