当我运行脚本时
DBCC CHECKIDENT ('table name', RESEED, 20000)
Run Code Online (Sandbox Code Playgroud)
消息的输出是
检查标识信息:当前标识值“200000”,当前
列值“200000”。DBCC 执行完成。如果 DBCC 打印错误
消息,请联系您的系统管理员。
当我通过运行查询身份值时
SELECT IDENT_CURRENT('table_name')
Run Code Online (Sandbox Code Playgroud)
它按预期显示为 200000,但是,当开发人员将记录插入表中时,它没有使用新的重新设定值。
有什么明显的我遗漏了吗?
所以我在 SQL Server 2014 中有一个存储事件的表。事件的生成速度不超过每 10 秒一次,但可能会慢得多(事件之间的几分钟或几小时)。事件之间的时间并不统一。
我想按时间对记录进行抽样。
例如,我想要求一个 10 分钟的采样 - 所以它会抓取记录 1,下一条记录应该是至少 10 分钟后的记录,然后下一条记录至少比第 2 行晚 10 分钟, 等等。
我可以通过迭代方法来实现这一点,循环遍历每条记录,但我想让数据库来完成这项工作。问题是,我不知道如何使用 T-SQL set/window 语句来做到这一点。
谁能帮我吗?
示例数据:
EventID | RecordTime
--------+--------------------
1 | 2017-04-01 12:00:00
2 | 2017-04-01 12:00:10
3 | 2017-04-01 12:00:20
4 | 2017-04-01 12:00:32
5 | 2017-04-01 12:05:42
6 | 2017-04-01 12:09:00
7 | 2017-04-01 12:24:12
8 | 2017-04-01 12:36:46
9 | 2017-04-01 12:36:57
10 | 2017-04-01 15:00:00
Run Code Online (Sandbox Code Playgroud)
想要的结果:
EventID | RecordTime
--------+--------------------
1 | 2017-04-01 12:00:00 …Run Code Online (Sandbox Code Playgroud) 我没有得到这个简单PRINT语句的任何输出。我错过了什么?
DECLARE @team varchar(20)
BEGIN
SELECT @team = TEAM
FROM DISTRIB_LINE
PRINT 'value is' + @team
END
Run Code Online (Sandbox Code Playgroud) 我已经使用 SQL 查询几个星期了,我正在尝试从错误中学习和理解。我有两列的表IsInvisible (bit)和ShortName (string)当一个被改变为更新的另一个也如: -如果添加〜于SHORTNAME到组的前面IsInvisible为1,并且如果〜被去除,以将其设置为0 -如果IsInvisible被设置为1 在 ShortName 前面添加 ~ 并在设置为 0 时将其删除。
我试过这样的事情:
ALTER TRIGGER [dbo].[updateInvisibility]
ON [dbo].[table]
AFTER UPDATE
AS
BEGIN
UPDATE t
SET IsInvisible = (CASE WHEN i.ShortName like '~%' THEN 1 ELSE 0 END),
ShortName = (CASE WHEN i.IsInvisible = 1 AND t.ShortName NOT LIKE '~%'
THEN '~' + t.ShortName
ELSE t.ShortName
END)
FROM table t JOIN
inserted i
ON t.Id = i.Id;
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我更新其中一列或同时更新两列时,没有任何反应,并且出现此错误:
Maximum stored …Run Code Online (Sandbox Code Playgroud) 我想创建一个带有NOT NULLbool 列的表。
我用TINYINT与CHECK约束BETWEEN 0 and 1。约束是新的,因此是可信的
现在我希望 SQL 优化器现在知道这个列只能是 0 和 1,所以当我写查询时,col >= 2我会在实际执行计划中看到常量扫描(就像我在检查NULL或SELECT TOP (0)
但事实并非如此,它选择了表扫描。我还需要在此列上建立索引吗?
在我下面的测试中,我使用TINYINT了CHECK约束。用户定义类型基于TINYINTwith boundRULE和 good old BIT。
GO
CREATE TYPE dbo.myBool
FROM [INT] NOT NULL
GO
CREATE RULE dbo.R_Bool AS @value BETWEEN 0 AND 1
go
EXEC sys.sp_bindrule @rulename = N'R_Bool'
, @objname = N'myBool'
GO
DROP TABLE IF EXISTS dbo.RuleTest
CREATE …Run Code Online (Sandbox Code Playgroud) 这是一个小的repro:
create table dbo.t (id int primary key, v int);
insert into dbo.t values (1, 1), (2, 2);
create table dbo.s (id int primary key, v int);
insert into dbo.s values (1, 10);
go
create trigger dbo.tr_t__iou
on dbo.t
instead of update
as
begin
set nocount on;
exec sp_lock @@spid;
end;
go
update dbo.t set v = 10 where id = 1;
update t
set
v = 10
from
dbo.s s join
dbo.t t on t.id = s.id;
update t …Run Code Online (Sandbox Code Playgroud) 我是一名数据库开发人员,主要编写 SSRS 报告。我想创建存储过程并向 DBA 保证这些存储过程无法写入生产数据库,而 DBA 不必仔细检查存储过程。
我在 DatabaseA 中创建存储过程。我需要存储过程来选择 DatabaseB 中的数据。
我希望任何用户都能够安全地执行 DatabaseA 中的存储过程,但无法使用该存储过程在 DatabaseB 中插入/更新/删除数据,无论用户可能拥有的任何其他权限如何。
DBA 能否在数据库或过程级别设置权限来强制执行此操作?
这是针对 SQL Sever 2016 的。
为什么下面的批次不能按预期工作?
DROP TABLE IF EXISTS #test1;
IF 1 = 1
SELECT *
INTO #test1
FROM sys.databases
WHERE database_id <= 5;
ELSE
SELECT *
INTO #test1
FROM sys.databases;
SELECT *
FROM #test1;
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到:
消息 2714,级别 16,状态 1,第 12 行 数据库中已有一个名为“#test1”的对象。
我必须像这样更改代码:
DROP TABLE IF EXISTS ##test1;
IF 1 = 1
EXEC ('
SELECT *
INTO ##test1
FROM sys.databases
WHERE database_id <= 5;
' );
ELSE
EXEC ('
SELECT *
INTO ##test1
FROM sys.databases;');
SELECT *
FROM ##test1;
Run Code Online (Sandbox Code Playgroud)
这按预期工作。上述错误似乎是一个解析错误,我不确定。谁能帮忙解释一下这里发生了什么?
我有一个巨大的表,假设有 500,000 行。我想将其(架构和数据)从一台服务器复制到另一台服务器。这不是更新插入或任何类型的更新;这是一次性的直接复制和粘贴。对此的惯用方法是什么?
我试过了:
t-sql ×10
sql-server ×9
trigger ×2
bulk-insert ×1
bulkcopy ×1
errors ×1
etl ×1
locking ×1
permissions ×1