我发现我们只能通过 t-sql 使文件组脱机,但要使该文件组联机,我们需要恢复整个数据库。
在尝试将其转换为合法时间时,我经常看到这种转换:
SELECT DATEADD (ms, -1 * ((s.cpu_ticks) - r.[timestamp]), GETDATE())
FROM sys.dm_os_ring_buffers r
CROSS JOIN sys.dm_os_sys_info s
Run Code Online (Sandbox Code Playgroud)
我收到错误:
将表达式转换为数据类型 int 时出现算术溢出错误。
转换这个的正确公式是什么?
答案:ms_ticks
我将创建由触发器填充的历史表(在插入、更新、删除之后)。由于只有 20% 的列要更新,我决定只记录更改的值 - 如果值没有更改,NULL则将在历史表中使用值。例如:
sparse与记录所有数据的普通实现相比,历史表列将节省大量空间(这是由于我的测试和我的业务案例)。
作为我的SQL Server 2016 SP1 standard edition支持者,Change Data Capture我想知道他们使用它和基于触发器的日志记录之间有什么优点/缺点/区别?
trigger sql-server t-sql change-data-capture sql-server-2016
我正在尝试创建巨型脚本,通过添加/删除/修改现有数据库的列来更新一堆表。困扰我的一个问题是,每当我在一个语句的表中添加新列并尝试在另一条语句中引用它时,它都会失败并显示关于无效列 xxx 的错误。
以下是我用来重现此问题的伪代码,
--CREATE TABLE testTable (u_id int, u_name varchar(10))
--INSERT INTO testTable VALUES (1,'11')
--INSERT INTO testTable VALUES (2,'12')
--INSERT INTO testTable VALUES (3,'13')
--INSERT INTO testTable VALUES (4,'14')
--INSERT INTO testTable VALUES (5,'15')
BEGIN
ALTER table testTable ADD u_add varchar(10)
END
BEGIN
CREATE TABLE tmp_xx_xx_testTable (u_id int, u_name varchar(10), u_add varchar(10))
INSERT INTO dbo.tmp_xx_xx_testTable VALUES (6,'16','DDD' )
INSERT INTO tmp_xx_xx_testTable (u_id,u_name,u_add)
SELECT u_id,u_name,u_add FROM TestTable
drop TABLE TestTable
EXECUTE sp_rename
N'[dbo].[tmp_xx_xx_testTable]',
N'TestTable';
END
--SELECT * …Run Code Online (Sandbox Code Playgroud) 我正在为一个报告创建一个查询,我们必须在其中进行跨数据库连接。不幸的是,我们必须加入的字段有两个单独的排序规则——“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”。这些之间的连接非常缓慢,并且确实影响了报告的速度 - 有什么方法可以优化它吗?更改排序规则以匹配明智和/或困难吗?
查询的连接部分如下
INNER JOIN EDE.dbo.DeliveryDetail D
ON D.DeliveryNoteNo COLLATE database_default = Consignments.CustomerReference COLLATE database_default
Run Code Online (Sandbox Code Playgroud) 我的查询返回大约 590 行和 8 列。我遇到的问题是从开始到结束查询需要 2 分 30 秒才能完成。这里的一群人教会了我很多如何编写更有效的查询,所以这里是另一个!
我使用的是date变量而不是变量,datetime因为我的变量只包含一个日期 - 我还使用Aaron Bertrand - Bad Habits To Kickyyyymmdd建议的格式存储我的日期。
我可以做些什么来优化此查询并使结果返回得更快?
DECLARE @Startdate date = '20170101',
@Enddate date = '20170131';
WITH fc As
(
Select
Teacher
,Team
,fc
FROM [Helper].[dbo].[fc]
)
,ia As
(
Select
Teacher
,tia
FROM dbo.ia
WHERE [hiredate] >= @Startdate
AND [hiredate] < DATEADD(DAY,1,@Enddate)
)
,inb As
(
Select
Teacher
,tinb
FROM inb
),
ripcord As
(
Select
Teacher
,pit
FROM [homebase].[dbo].[rip] …Run Code Online (Sandbox Code Playgroud) 我有两个表:products和products_discounts。如果某个产品被指定为“前 10 名”产品,并且在 中缺少定义的折扣products_discounts,我想products_discounts为每个缺少的记录插入一条记录。插入的值将由product_idINSERT INTO中的和另外两个硬编码值组成。
产品
id、product_id、名称、top_ten
Products_Discounts
id、product_id、discount_amount、discount_description
以下是我计划如何手动执行此操作,但由于我将每年重复此过程几次,因此我想看看这是否可以通过几行 SQL 完成。
(1) 获取符合我的条件的产品列表。
SELECT p.product_id, pd.discount_amount FROM products AS p
LEFT OUTER JOIN products_discounts AS pd
ON p.product_id = pd.product_Id
WHERE p.top_ten = 1
AND pd.product_id IS NULL
Run Code Online (Sandbox Code Playgroud)
(2) 使用文本编辑器构建每个单独的 INSERT INTO 语句。我会使用步骤 1 的输出来获取product_ids 但其他两个值将保持不变(硬编码)。
INSERT INTO products_discounts (product_id, discount_amount, discount_description)
VALUES ('<product_id goes here>', 10, 'Top 10 Product')
Run Code Online (Sandbox Code Playgroud)
这些步骤可以组合成几行SQL吗?
我希望我的应用程序在所有数据库级别(服务器、数据库、列)使用相同的排序规则:Latin1_General_CI_AS 这是Dan Guzman推荐的具有一致排序规则并从一开始就获得排序规则配置的建议。
Azure SQL Server(服务器)的默认排序规则是SQL_Latin1_General_CP1_CI_AS。我想将其更改为Latin1_General_CI_AS。或者使用排序规则 Latin1_General_CI_AS创建一个新的 Azure Sql Server(服务器)。对于本地 SQL Server,这是可能的。
在2010年的SQL Azure 排序规则文档中声明...服务器和数据库排序规则不能在 SQL Azure 中配置...除此之外,我没有发现有用的东西。
如果我可以创建一个新的 Azure SQL Server(服务器),并且排序规则为 Latin1_General_CI_AS ,我会非常高兴。
是否有可能或存在解决方法?我真的很感激任何帮助。
我需要一种查询 SQL 表并按季度提取数据的方法。我知道 SQL Server 有一个DatePart()函数,它有一个参数,q = Quarter我想出了这个语法,但是对于一个包含大约 50,000 行的表,这个语法非常慢。这是实现此结果的最佳方法还是可以进行更多优化?
Declare @startdate date = '20170101', @enddate date = '20171231'
Select
Employeename
,[Total Amount Paid] = SUM(ISNULL(Totalcheckamt,0))
FROM dbo.PaymentHistory
WHERE DatePart(q,[DatePaid]) = 1
AND [DatePaid] BETWEEN CAST(DateAdd(yy, -1, @startdate) As Date)
AND CAST(DateAdd(yy, -1, @enddate) As Date)
GROUP BY Employeename
Order By Employeename ASC
Run Code Online (Sandbox Code Playgroud)
编辑
我想要的返回结果是这样的
Employee Name -- Q1 --- Q2 --- Q3 --- Q4
James XXXXX.XX XXXX.XX XXXX.XX XXXX.XX
Roger XXXXX.XX XXXX.XX XXXX.XX XXXX.XX
Run Code Online (Sandbox Code Playgroud)
编辑 …
我正在尝试在 SQL Server 2008 R2 中进行计算,但我不断收到错误
消息 245,级别 16,状态 1,第 10
行将 varchar 值“.05”转换为数据类型 int 时转换失败。
更改表结构不是一种选择,有没有办法可以更改查询以便成功执行?
DECLARE @Test1 TABLE
(
field1 VARCHAR(10),
field2 INT
);
INSERT INTO @Test1 ( field1, field2 )
VALUES ( '.05', 12 );
SELECT field1 / field2
FROM @Test1;
Run Code Online (Sandbox Code Playgroud)