我有一个简单恢复模式的大型数据库(供应商要求),花了 3 天时间将其备份到新托管公司的服务器。
第三天早上,由于事务日志已填满其驱动器,DB 下线。
我的理解是 SQL Server 将开始回收空间。更有趣的是,在我给它更多空间之前,我认为数据库不会再次开始工作——它在备份完成后仍然被破坏。不过,我没有花时间进行正确的调试,所以我不知道为什么会卡住。
问题:为什么 SQL Server 在 Simple Recovery 中不能在备份时回收其事务日志?
我需要确认我们的 SQL Server 中是否曾经存在过一个特定的表。是否存在可用于列出 SQL Server 实例中所有删除的数据库的现有脚本或方法?
我有一个查询如下所示:
select count(*) as Count, datepart(yyyy, [LogDate]) as [Year]
from ViewAssociate..Auth_Log
where ActionCode = 12
group by datepart(yyyy, [LogDate])
order by [Year]
Run Code Online (Sandbox Code Playgroud)
此查询是基于 ReadAssociate 数据库的存储过程的一部分。它试图从 ViewAssociate 数据库中获取数据。尝试运行存储过程的用户无权访问 ViewAssociate 数据库,因此查询会引发错误。
我的问题是我能否以某种方式修改查询并为其提供用户名密码以运行,以便我可以从 ViewAssociate Db 获取数据。有人建议,Execute As但这似乎不起作用。
execute as login = 'viewassociate' 我收到此错误:
无法作为服务器主体执行,因为主体“viewassociate”不存在,无法模拟此类主体,或者您没有权限。
该 viewassociate 是一个 sql 登录,它属于db_ownerViewAssociate 数据库。
我收到此错误:
"Error 102 : non-boolean type specified in a context where a condition is expected"
对于此请求:
DECLARE @num_dossiers TABLE (num_dossier INT,indice NVARCHAR(3))
insert into @num_dossiers
select num_dossier,indice from dossier where num_sec=57
delete from constitue where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers
Run Code Online (Sandbox Code Playgroud)
触发错误的请求是最后一个:
delete from constitue where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers
Run Code Online (Sandbox Code Playgroud)
导致此错误的原因可能是什么?
在我当前的企业中,我遇到了大量与特定场景相关的问题。
我们有一个 SQL Server 2008,我们想迁移到 SQL Server 2016,所以我们将兼容性从 80 迁移到 100,但是我们的一些存储过程有问题,如下代码所示:
CREATE TABLE #PRUEBA (texto1 char(30), condicion char(30))
INSERT INTO #PRUEBA VALUES ('PFI','1')
INSERT INTO #PRUEBA VALUES ('CFI','2')
SELECT
CASE
WHEN condicion= '1' THEN texto1
ELSE 'TFI'
END
FROM #PRUEBA
DROP TABLE #PRUEBA
Run Code Online (Sandbox Code Playgroud)
兼容性 -> 80
'PFI ' -> char of 30 length
'TFI ' -> char of 30 length
Run Code Online (Sandbox Code Playgroud)
兼容性 -> 90
'PFI ' -> varchar of 30 length
'TFI' -> varchar of 3 length
Run Code Online (Sandbox Code Playgroud)
兼容性 -> 100
'PFI …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server varchar sql-server-2016 compatibility-level
我有一张这样的表:
TB1:
COD | A001 | A002 | A003
1 cars baby nasa
Run Code Online (Sandbox Code Playgroud)
然后是第二张桌子:
TB2:
COD | NO_COL_TB1 | DESCRIPTION |
1 | A001 | Something
2 | A002 | lasagna
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是这样的事情(显然这不起作用)
select A001 as (select description from TB2 WHERE no_col_tb1= A001 )
,A002 AS (select description from TB2 WHERE no_col_tb1= A002 )
from TB1
Run Code Online (Sandbox Code Playgroud)
我尝试使用内部连接和一些动态 sql,但我无法思考这个逻辑。有一些关于此的问题,但没有一个可以帮助我。我认为这是不可能用单个语句完成的,只能用动态 SQL 来完成。
编辑:
正确的结果是:
SELECT COD,
TB1.A001 AS 'Something',
TB1.A002 AS 'Lasagna'
FROM TB1
Run Code Online (Sandbox Code Playgroud)
结果将是:
COD |SOMETHING | LASAGNA |
1 cars baby
Run Code Online (Sandbox Code Playgroud) 我正在将数据库移动到新服务器。
新服务器运行 SQL Server 2016,当前服务器运行 SQL Server 2008。
我需要在几周内制定备份/后备计划(以防出现问题 - 我可以将我的应用程序切换回 2008 Server 并继续工作)。
我想知道是否可以启用复制(或替代方案?)并使所有事务/合并在 2008 实例上同步,以便两个数据库都是最新的,以防我需要切换到旧数据库?
由于业务需求,我们必须能够回退到 SQL Server 2008。这是没有商量余地的。
我正在使用我公司的数据库,为许多外部应用程序提供数据。所以我需要将相同的数据转换成很多动态视图。我可以看到一位前数据库开发人员已经实现了许多长链视图-函数-过程调用序列,以进行所有外部应用程序更常见的转换。我认为,这种架构和如此长的请求(存储过程调用一些函数,然后 funcs 调用一些视图,这个视图基于其他视图等等)是一个性能问题,至少查询优化器没有解决这些问题(请确认我的猜测)。这是好方法吗?它是性能下降的原因吗?如果是,我如何重新实现数据库的对象。此刻,我看到了执行此操作的以下步骤:
谢谢你。
performance sql-server-2008 database-design database-recommendation
我现在有点困惑。有人可以用一个简单的答案来回答我这个问题。
我有一个用户 [user_test],并为一个数据库 [database_test] 分配了 [db_owner] 角色。用户的默认架构是 [user_test] 并且几乎所有来自 [database_test] 的对象都是在架构 [user_test] 下创建的。在数据库中还存在 3 个具有架构 [dbo] 的对象
用户对两种模式都有权限:[dbo] 和 [user_test],无需在对象引用前面的 select 语句中明确指定它们。
当用户 [user_test] 调用对象时,SQL 检查的第一个模式是什么?
我的意思是,如果 [user_test] 从 dbo 模式中选择一个对象(前面没有模式),SQL 会先检查它指定的默认模式,然后再检查 dbo 吗?
谢谢,
我已经将 CLR 用户定义函数用于非常特定的实例,例如复杂的字符串处理,但从维护的角度来看通常不喜欢它们(又是另一个隐藏代码的地方)。人们如何看待这种功能的优缺点,从性能和维护的角度来看,是否有关于何时使用它们的最佳实践指南?