javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

sql-引用表中没有与外键中的引用列列表匹配的主键或候选键

在SQL Server中,出现此错误->

“引用的表中没有主键或候选键 与外键中的引用列列表匹配的“ BookTitle” 'FK_BookCopy_Title__2F10007B'。”

我首先创建了一个称为BookTitle的关系。

CREATE TABLE BookTitle (
ISBN            CHAR(17)       NOT NULL,
Title           VARCHAR(100)   NOT NULL,
Author_Name     VARCHAR(30)    NOT NULL,
Publisher       VARCHAR(30)    NOT NULL,
Genre           VARCHAR(20)    NOT NULL,
Language        CHAR(3)        NOT NULL,    
PRIMARY KEY (ISBN, Title))

然后,我创建了一个称为BookCopy关系。 该关系需要引用BookTitle关系的主键Title

CREATE TABLE BookCopy (
CopyNumber         CHAR(10)            NOT NULL,
Title              VARCHAR(100)        NOT NULL,
Date_Purchased     DATE                NOT NULL,
Amount             DECIMAL(5, 2)       NOT NULL,
PRIMARY KEY (CopyNumber),
FOREIGN KEY (Title) REFERENCES BookTitle(Title))

但是我无法创建BookCopy关系,因为出现了上述错误。

我真的很感谢一些有用的帮助。

trans by 2020-08-12T08:49:10Z

SQL Server如何处理存储过程中有关事务的语句?

说我有一个存储过程,该过程由几个单独的SELECT,INSERT,UPDATE和DELETE语句组成。 没有明确的BEGIN TRANS / COMMIT TRANS / ROLLBACK TRANS逻辑。

SQL Server将如何以事务方式处理此存储过程? 每个语句都会隐式连接吗? 还是存储过程会有一笔交易?

另外,如何使用T-SQL和/或SQL Server Management Studio独自发现这一点?

谢谢!

trans by 2020-08-12T03:38:24Z

sql server-将动态sql的结果分配给variab

我正在执行动态SQL以将表中的所有列转换为字符串

所以毕竟我会做

EXEC(@template); 

其中@template是动态生成的查询,因此:

col1  col2 col3
---------------
1    7    13 
2    8    14
3    9    15
4   10    16
5   11    17
6   12    18

(此结果:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18)

如何将结果字符串分配给变量

就像是?

DECLARE  @result AS varchar(max);
 SET @result = EXEC(@template); 
trans by 2020-08-12T02:04:03Z

sql-使用什么? 查看或临时标签

我在决定使用视图还是临时表时遇到问题。

我有一个从程序调用的存储过程。 在该SP中,我将长时间查询的结果存储在临时表中,命名列,然后对该表进行另一个查询,将结果存储在标签或gridview或其他内容中,然后删除临时表。 我还可以将查询结果存储在一个视图中并在该视图上进行查询。 所以什么更好,或者在什么情况下我必须使用“视图/温度表”。

根据我的研究,视图具有以下优点:安全性,简单性和列名规范。 我的临时表也满足了所有这些要求(根据我的观点)。

trans by 2020-08-12T00:40:53Z

sql server-发票,发票行和修订的数据库设计

我正在为一家特许经营的CRM设计一个关系数据库的第二次主要迭代(需要大量重构),我需要有关最佳数据库设计实践的帮助,以存储作业发票和发票行,并对每项所做的任何更改都具有很强的审计追踪能力 发票。

当前模式

InvoiceRevisions桌子

InvoiceId (int) // Primary key
JobId (int)
StatusId (tinyint) // Pending, Paid or Deleted
UserId (int) // auditing user
Reference (nvarchar(256)) // unique natural string key with invoice number
Date (datetime)
Comments (nvarchar(MAX))

InvoiceRevisions Table

LineId (int) // Primary key
InvoiceId (int) // related to Invoices above
Quantity (decimal(9,4))
Title (nvarchar(512))
Comment (nvarchar(512))
UnitPrice (smallmoney)

修订架构

InvoiceRevisions桌子

RevisionId (int) // Primary key
InvoiceId (int)
JobId (int)
StatusId (tinyint) // Pending, Paid or Deleted
UserId (int) // auditing user
Reference (nvarchar(256)) // unique natural string key with invoice number
Date (datetime)
Total (smallmoney)

模式设计注意事项

1.存储发票的“已付款”或“待处理”状态是否明智?

收到的所有发票付款都存储在InvoiceRevisions表中(例如现金,信用卡,支票,银行存款)。 如果可以从Payments表中推断出与给定工作发票相关的所有收入,则在Invoices表中存储“已付款”状态是否有意义?

2.如何跟踪发票行项目修订?

我可以通过将状态更改以及发票总额和审核用户存储在发票修订表中(请参见上面的InvoiceRevisions)来跟踪发票的修订,但是很难维护发票行修订表。 有什么想法吗? 编辑:订单项应该是不变的。 这适用于“草稿”发票。

3.税收

存储发票数据时,应如何计入营业税(或SA中的14%增值税)?


编辑:好的反馈,伙计们。 根据定义,发票和发票行是不可变的,因此跟踪更改是不明智的。 但是,“草稿”发票必须由多个人编辑(例如,经理在技术员创建发票后应用折扣),然后才能发行...

4.定义和跟踪发票状态的最佳方法?

  1. 草案
  2. 发行
  3. 虚空

...必须朝一个方向改变?

trans by 2020-08-11T21:34:39Z

如何在SQL Server中声明变量并在同一存储过程中使用它

我试图从一个表中的BrandID获取值并将其添加到另一表中。 但是我无法使它工作。 有人知道该怎么做吗?

CREATE PROCEDURE AddBrand
AS

DECLARE 
@BrandName nvarchar(50),
@CategoryID int,
@BrandID int

SELECT @BrandID = BrandID FROM tblBrand 
WHERE BrandName = @BrandName

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (@CategoryID, @BrandID) 

RETURN
trans by 2020-08-11T17:40:51Z

mysql-使用不同数据库的数据库和模式之间的区别?

MS SQL和MySQL在数据库术语上有什么区别?

一个MySQL实例可以有多个数据库吗? 看来它只能创建不同的架构。 但是,SQL命令为create database

在MS SQL中,您可以创建多个数据库……每个数据库都有默认的dbo模式?……但是数据库中仍然可以有多个模式?

trans by 2020-08-11T07:50:02Z

SQL Server-数据库名称约定:DATETIME列

DATETIME列的命名约定是什么(在我的情况下,使用MS SQL Server)

对于存储创建行的时间的列,CreatedDatetime或LastModifiedDatetime是有意义的。

但是对于一个简单的表,假设一个名为Event的表,您是否可以创建称为:

EventID,                 // Primary key
EventDatetime,           // When the event is happening
EventEnabled             // Is the event is on

要么

ID,                      // Primary key
Datetime,                // When the event is happening
Enabled                  // Is the event is on

如果您都不使用任何约定:请提供您将使用的列名。

trans by 2020-08-11T00:24:47Z

sql server-将用户映射到数据库的T SQL

因此,我无法让用户企业经理执行此操作。。。如果是的话,我什至不会问这个问题。 因此,我想知道是否存在通过TSQL执行将用户映射到特定数据库并授予他们“所有者”权限的命令的方法。

谢谢...

trans by 2020-08-11T00:03:53Z

将登录名分配给未登录的用户(SQL Server)

我的数据库中有一个没有关联登录名的用户。 它似乎是未经登录创建的。

每当我尝试与此用户连接到数据库时,都会出现以下错误:

Msg 916, Level 14, State 1, Line 1
The server principal "UserName" is not able to access the database 
"DatabaseName" under the current security context.

我想为此用户指定一个登录名,以便我可以实际使用它来访问数据库。 我尝试使用以下脚本将登录名与用户相关联。

USE [DatabaseName]
ALTER USER [UserName]
WITH LOGIN = [UserName]

但这给了我以下错误:

Msg 33016, Level 16, State 1, Line 2
The user cannot be remapped to a login. Remapping can only be done for users 
that were mapped to Windows or SQL logins.

有什么办法可以给该用户分配登录名? 我不想从头开始,因为该用户有很多权限需要重新设置。

编辑:针对Philip Kelley的问题,这是运行select * from sys.database_principals where name = 'username'时得到的结果。

SQL User

抱歉图片的大小,您需要在新标签页中将其打开才能正确查看。

不:

好的,我已经按照gbn的建议删除了现有的LOGIN,并且正在使用以下脚本创建一个具有与用户相同SID的新LOGIN。

CREATE LOGIN [UserName] 
WITH PASSWORD=N'Password1', 
DEFAULT_DATABASE=[DatabaseName], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF, 
SID=0x0105000000000009030000001139F53436663A4CA5B9D5D067A02390

现在给我以下错误消息,看来SID对于LOGIN的SID字段来说太长了。

Msg 15419, Level 16, State 1, Line 1
Supplied parameter sid should be binary(16).

我在没有桨的小河上吗?

trans by 2020-08-10T23:46:14Z

c#-一次连接执行多个sql命令或每次重新连接是否更好?

这是我的测试代码,似乎暗示多次连接比一次连接更好。

难道我做错了什么?

int numIts = 100;
Stopwatch sw = new Stopwatch();
sw.Start();
using (SqlConnection connection = new SqlConnection(connectionParameters))
{   
            connection.Open();
    for(int i = 0; i < numIts; i++)
    {
        SqlCommand command = new SqlCommand(sqlCommandName, connection);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue(par1Name, par1Val);
                command.Parameters.AddWithValue(par2Name, par2Val);
        using(SqlDataReader reader = command.ExecuteReader())
        {
        }
    }
}
sw.Stop();
TimeSpan durationOfOneConnectionManyCommands = sw.Elapsed;
Console.WriteLine(durationOfOneConnectionManyCommands);

sw.Reset();

sw.Start();
for(int i = 0; i < numIts; i++)
{
    using (SqlConnection connection = new SqlConnection(connectionParameters))
    {   
                connection.Open();
        SqlCommand command = new SqlCommand(sqlCommandName, connection);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue(par1Name, par1Val);
                command.Parameters.AddWithValue(par2Name, par2Val);
        using(SqlDataReader reader = command.ExecuteReader())
        {
        }
    }                               
}
sw.Stop();
TimeSpan durationOfManyConnections = sw.Elapsed;
Console.WriteLine(durationOfManyConnections);

输出:

//output:
//00:00:24.3898218   // only one connection established
//00:00:23.4585797   // many connections established.
//
//output after varying parameters (expected much shorter):
//00:00:03.8995448
//00:00:03.4539567

更新:

好的,所以那些说使用一个连接会更快的人有了它。 (尽管相差不大,如果有的话。)这是修改后的代码和输出:

public void TimingTest()
{
    numIts = 1000;
    commandTxt = "select " + colNames + " from " + tableName;

    OneConnection();
    ManyConnections();
    OneConnection();
}
private void ManyConnections()
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    for (int i = 0; i < numIts; i++)
    {
        using (SqlConnection connection = new SqlConnection(connectionParameters))
        {
            connection.Open();
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = commandTxt;

                using (SqlDataReader reader = command.ExecuteReader())
                {
                }
            }
        }
    }
    sw.Stop();
    TimeSpan durationOfManyConnections = sw.Elapsed;
    Console.WriteLine("many connections: " + durationOfManyConnections);
}
private void OneConnection()
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    using (SqlConnection connection = new SqlConnection(connectionParameters))
    {
        connection.Open();
        for (int i = 0; i < numIts; i++)
        {
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = commandTxt;
                using (SqlDataReader reader = command.ExecuteReader())
                {
                }
            }
        }
    }
    sw.Stop();
    TimeSpan durationOfOneConnectionManyCommands = sw.Elapsed;
    Console.WriteLine("one connection: " + durationOfOneConnectionManyCommands);
}

输出:

one connection: 00:00:08.0410024
many connections: 00:00:08.7278090
one connection: 00:00:08.6368853

one connection: 00:00:10.7965324
many connections: 00:00:10.8674326
one connection: 00:00:08.6346272

更新:

如果我在每个函数之后都使用SQLConnection.ClearAllPools(),则区别更加明显:

输出:

one connection: 00:00:09.8544728
many connections: 00:00:11.4967753
one connection: 00:00:09.7775865
trans by 2020-08-10T22:23:36Z

何时使用完全外部联接的好情况?

我始终不鼓励使用一种方法,但是当它是最佳方法时是否存在这种情况?

trans by 2020-08-10T20:58:16Z

数据库设计-主键的Sql数据类型-SQL Server?

我们应将哪种sql数据类型用于基数主键:

  1. 整型
  2. 比金特
  3. 数字
  4. 浮动
trans by 2020-08-10T15:12:54Z

SQL Server-如何在MS SQL中检索最近30分钟的记录?

我想检索表中最近30分钟的记录。 怎么做? 以下是我的查询..

select * from
[Janus999DB].[dbo].[tblCustomerPlay]
where DatePlayed < CURRENT_TIMESTAMP
and DatePlayed >
(CURRENT_TIMESTAMP-30)
trans by 2020-08-10T10:48:28Z

SQL Server随机

在存储过程中将sql查询结果按随机顺序排序的最佳方法是什么?

trans by 2020-08-10T07:05:51Z

sql server-不带Order By子句的SQL Select语句的顺序

据我所知,从关系数据库理论来看,没有order by子句的select语句应考虑为没有特定顺序。 但是实际上,在SQL Server和Oracle中(我已经在这两个平台上进行了测试),如果我多次从没有order by子句的表中查询,我总是得到相同顺序的结果。 可以依靠这种行为吗? 有人可以帮忙解释一下吗?

trans by 2020-08-10T05:17:03Z

SQL中临时表的范围

我编写了一个存储过程,以将数据从一个数据库导入并转换到另一个数据库。 每次导入都将使用一个公司ID,并导入与此公司相关的所有数据。

为了帮助进行转换,我使用了临时表。 在脚本审查中,有人告诉我使用表变量而不是临时表。审阅者声称,如果我们同时运行两个不同的导入,则临时表将被共享并破坏导入。


问题:

  • 如果我们同时运行两个不同的导入,是否可以共享临时表?
  • 每个对EXEC的调用都会创建一个新的作用域吗?

这是该脚本的虚构示例。

CREATE PROC [dbo].[ImportCompany]
(
    @CompanyId AS INTEGER
)
AS
EXEC [dbo].[ImportAddress] @CompanyId = @CompanyId 
--Import other data

CREATE PROC [dbo].[ImportAddress]
(
    @CompanyId AS INTEGER
)
AS
    CREATE TABLE #Companies (OldAddress NVARCHAR(128), NewAddress NVARCHAR(128))
    INSERT INTO #Companies(OldAddress, NewAddress)
    SELECT
        Address as OldAddress,
        'Transformed ' + Address as NewAddress
    FROM
        [OldDb].[dbo].[Addresses]
    WHERE
        CompanyId = @CompanyId

    --Do stuff with the transformed data

    DROP TABLE #Companies

EXEC [dbo].[ImportCompany] @CompanyId = 12345
trans by 2020-08-09T22:50:22Z

sql server-在T-SQL查询的SELECT子句中使用比较运算符

如何选择比较运算符的结果作为BIT类型的字段?

它在T-SQL中的工作方式:

bool isGreater = FieldA > FieldB;

T-SQL如何运作:

SELECT (FieldA > FieldB) AS BIT FROM t

如何正确编写这样的任务?

trans by 2020-08-09T13:22:45Z

C#-处理DBNull的最佳方法是什么

我经常遇到从SqlDataAdapters返回的DBNull's的问题。当我尝试使用如下代码填充对象时:

DataRow row = ds.Tables[0].Rows[0];
string value = (string)row;

在这种情况下,处理DBNull's的最佳方法是什么。

trans by 2020-08-09T04:10:29Z

在SQL中将负数据转换为正数据

该表的当前数据为:

  a   b
---------
 -1   5
-11   2
 -5  32

我的要求是将每个数据转换为正值。

不幸的是,我忘记了启用转换的SQL Server内置函数的名称。

trans by 2020-08-07T09:47:08Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共65页