【问题标题】:How can I make this code work on SQL Server如何使此代码在 SQL Server 上运行
【发布时间】:2020-09-03 15:06:18
【问题描述】:

我想知道为什么我的 SQL 代码在 SQL Server 上无法正常运行,而当我将其上传到 phpmyadmin 时却运行良好。这些SQL之间有什么区别吗?有人能让这段代码在 SQL Server 上运行良好吗?我只发布了数据库的一部分,但在您的帮助下,我会完成其余的。

create database Biblioteka;

use Biblioteka;

create table Autorzy
(
    ID_Autora int(5) Primary Key auto_increment,
    Imie varchar(25),
    Nazwisko varchar(25)
);

create table Czytelnicy
(
    ID_Czytelnika int(3) Primary Key auto_increment,
    ID_Klasy int(3),
    Imie varchar(25),
    Nazwisko varchar(25),
    PESEL char(11)
);

create table Klasa
(
    ID_Klasy int(3) Primary Key auto_increment,
    Nazwa_Klasy varchar(5)
);

alter table Czytelnicy
add foreign key (ID_Klasy) references Klasa(ID_Klasy);

insert into Autorzy values('','Stefan','Batory');
insert into Autorzy values('','Gabriela','Zapolska');
insert into Autorzy values('','Joanne','Rowling');

insert into Czytelnicy values('','1','Adam','Nowak','97091309264');
insert into Czytelnicy values('','2','Anna','Kowalczyk','99062312546');
insert into Czytelnicy values('','2','Jan','Dabrowski','77022610926');

insert into Klasa values('','1A');
insert into Klasa values('','2B');
insert into Klasa values('','3C');

【问题讨论】:

  • MySQL和SQL Server是两个不同的数据库,SQL方言不同。您不能期望 MySQL 脚本在 SQL Server 中按原样工作。
  • 你遇到了什么错误?
  • 您的代码可能无法在 MySQL 上运行:我希望在自动递增的列中插入空字符串会失败。
  • 我遇到了很多错误。首先,它说数据库“名称”不存在,我只需要执行该代码的 1 行。创建它时,它会显示“'auto_increment' 附近的语法不正确”。当我处理它时,它与int的另一个问题..
  • 每个 RDBMS 都有不同的 SQL 方言。 SQL Server 使用 T-SQL (Transact SQL),而 MySQL 也使用自己的 SQL 版本。当从一个 RDBMS 迁移到另一个 RDBMS 时,您必须(手动)从以前的方言翻译成新的方言。很少有代码可以在 RDBMS 之间传输,因为它们都有不同的实现。甚至 ISO SQL 也不是每个 RDBMS 都支持,它们都倾向于支持这些标准的不同数量/部分。

标签: sql sql-server tsql sql-insert create-table


【解决方案1】:

作为初学者,您的原始 MySQL 代码存在问题:

  • 不支持在自动递增的列中插入空字符串;相反,您不应该在该列中插入,并让数据库自动为其分配一个值(这需要明确列出您想要 insert 进入的列,这无论如何都是 SQL 中的最佳实践)

  • 你需要先在表Klasainsert然后插入到引用表Czytelnicy

在将其转换为 SQL Server 时:

  • 不支持auto_increment;你可以改用identity(1, 1)

  • int 不接受长度

这可行:

create table Autorzy(
    ID_Autora int identity(1, 1) Primary Key,
    Imie varchar(25),
    Nazwisko varchar(25)
);

create table Czytelnicy(
    ID_Czytelnika int identity(1, 1) Primary Key,
    ID_Klasy int,
    Imie varchar(25),
    Nazwisko varchar(25),
    PESEL char(11)
);

create table Klasa(
    ID_Klasy int identity(1, 1)Primary Key,
    Nazwa_Klasy varchar(5)
);

alter table Czytelnicy
add foreign key (ID_Klasy) references Klasa(ID_Klasy);

insert into Autorzy(Imie, Nazwisko) values('Stefan','Batory');
insert into Autorzy(Imie, Nazwisko) values('Gabriela','Zapolska');
insert into Autorzy(Imie, Nazwisko) values('Joanne','Rowling');

insert into Klasa(Nazwa_Klasy) values('1A');
insert into Klasa(Nazwa_Klasy) values('2B');
insert into Klasa(Nazwa_Klasy) values('3C');

insert into Czytelnicy(ID_Klasy, Imie, Nazwisko, PESEL) values(1,'Adam','Nowak','97091309264');
insert into Czytelnicy(ID_Klasy, Imie, Nazwisko, PESEL) values(2,'Anna','Kowalczyk','99062312546');
insert into Czytelnicy(ID_Klasy, Imie, Nazwisko, PESEL) values(2,'Jan','Dabrowski','77022610926');

Demo on DB Fiddle

【讨论】:

    【解决方案2】:

    我已更改语法以使用 MS SQL Server。在插入新记录之前检查外键

    create database Biblioteka;
    go
    
    use Biblioteka;
    
    create table Autorzy(
    ID_Autora  int Primary Key identity(1,1),
    Imie varchar(25),
    Nazwisko varchar(25));
    
    create table Czytelnicy(
    ID_Czytelnika int Primary Key identity(1,1),
    ID_Klasy int,
    Imie varchar(25),
    Nazwisko varchar(25),
    PESEL char(11));
    
    create table Klasa(
    ID_Klasy int Primary Key identity(1,1),
    Nazwa_Klasy varchar(5));
    
    alter table Czytelnicy
    add foreign key (ID_Klasy) references Klasa(ID_Klasy);
    
    insert into Autorzy values('Stefan','Batory');
    insert into Autorzy values('Gabriela','Zapolska');
    insert into Autorzy values('Joanne','Rowling');
    
    insert into Czytelnicy values('1','Adam','Nowak','97091309264');
    insert into Czytelnicy values('2','Anna','Kowalczyk','99062312546');
    insert into Czytelnicy values('2','Jan','Dabrowski','77022610926');
    
    insert into Klasa values('1A');
    insert into Klasa values('2B');
    insert into Klasa values('3C');
    

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2013-09-12
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多