当 SQL Server 数据库处于 SIMPLE 模式时,您不必关心事务日志 bakcups。但是在 SIMPLE 模式下,事务日志似乎会像在 FULL 模式下一样增长。是否会在某个时间点自动截断?还是我必须手动截断/缩小它?
我刚刚了解了新的 sp_executesql 存储过程。我喜欢有一种方法可以从 SQL Server 中执行参数化代码。
但是,我想知道在没有任何参数时使用 sp_executesql 存储过程与直接调用 EXEC 之间有什么区别。另外,是否有性能影响?
exec('select * from line_segment')
exec sp_executesql N'select * from line_segment'
Run Code Online (Sandbox Code Playgroud)
另外,2005 年和 2008 年之间是否存在差异,或者它们的处理方式是否相同?
我刚刚通过 DTA 运行了一个 T-SQL 查询,其中一项建议是在作为 SQL 代码文件中许多查询的一部分的列之一上创建统计信息。
我的问题是,统计数据究竟如何帮助提高性能?
我的数据库中有一些不应缓存的表。
如何告诉 SQL Server 不要缓存表的页面或如何从缓存中刷新单个表?
刷新所有缓存不是一种选择。
我正在使用 SQL Server 2008 和 SQL Server 2008 R2。
我testtable在数据库testbase中创建了一个具有以下结构的表:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
Run Code Online (Sandbox Code Playgroud)
但是,如何编写触发器,以便它更新已修改(或使用新信息更新)的特定行,并将修改日期记录到expire_date字段中,并将修改时间记录到expire_time字段中?(或者如果这是可能的?)
我已授予用户执行使用动态 SQL 的存储过程的权限。但是当他试图执行它时,他得到了错误:
对象“[表名]”、数据库“[数据库名]”、架构“dbo”的 SELECT 权限被拒绝。
用户是否需要被授予存储过程使用的任何表的权限?那对我来说真的没有任何意义。
一点背景。我们开发了一个使用合并复制的应用程序。目前,我们目前发布了大约 212 篇文章,一切都很好,因为它似乎属于 256 篇文章的数量限制。(在服务器上使用 SQL Standard 2005,在订阅者级别使用 2005 Express。)
我们正在开发一个新版本,一个从头开始构建的新数据库,它的最低系统要求是 SQL 2008 R2 Standard 服务器端和 Express 2008 R2 客户端,这似乎也有对已发表文章的计数限制相同 256。(是的,我们也将支持 2012,但它的限制是相同的)
问题在于我们在新版本中成功测试了 400 多篇文章,并且所有内容都进行了功能测试(发布创建、快照和订阅者创建以及复制本身)。之前有没有其他人超过计数限制,这只是一个软推荐限制吗?我们没有看到任何错误,无论是在发布创建过程中,还是在订阅者创建过程中。
根据这篇文章:http : //msdn.microsoft.com/en-us/library/ms143432%28v=sql.105%29
我正在等待微软的回电,但我想知道是否有人以前在任何版本的 SQL 中看到过这个。
sql-server-2005 sql-server-2008 sql-server merge-replication
最近我一直在使用 EXECUTE AS LOGIN 来检查某个人是否可以或不能在我们的一个数据库中使用表函数。测试表明他可以,但他一再报告失败。
该人使用登录“WEB”连接到数据库,并且他在该数据库中拥有与登录“WEB”关联的用户“WEB”,因此我尝试了以下脚本:
-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
Run Code Online (Sandbox Code Playgroud)
和
-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
Run Code Online (Sandbox Code Playgroud)
第一部分很好,结果如下:
网站 | 网站 | 网站 | 网络
但是第二个结果有点令人困惑:
dbo | 网站 | 网站 | 网络
EXECUTE AS USER 和 EXECUTE AS LOGIN …
我们现在正在从 SQL Server 2000 迁移到 2008。我们正在对代码和脚本进行大量更改,因为自 2000 年到 2008 年以来发生了很多变化。在进行这些更改时,我想知道的是 - 我现在可以做些什么来使其与 2012 兼容吗?同时。至少那些从 2012 年到 2008 年向后兼容的变化等等。我想这样做的原因是,当我们决定从 2008 年移到 2012 年时,尽量减少未来(从现在开始的 3 到 4 年)的任何努力。任何在我能做的或需要注意的一切?
我的实际工作查询是内部联接,但是这个带有交叉联接的简单示例似乎几乎总是会重现该问题。
SELECT *
FROM (
SELECT 1 UNION ALL
SELECT 2
) AA ( A )
CROSS JOIN (
SELECT NEWID() TEST_ID
) BB ( B )
Run Code Online (Sandbox Code Playgroud)
通过我的内部连接,我有很多行,我使用 NEWID() 函数为每个行添加了一个 GUID,对于大约 10 个这样的行中的 9 个,与 2 行虚拟表的乘法产生了预期的结果,只有 2 个副本相同的 GUID,而十分之一会产生不同的结果。至少可以说这是出乎意料的,让我很难在我的测试数据生成脚本中找到这个错误。
如果您使用非确定性 getdate 和 sysdatetime 函数查看以下查询,您将看不到这一点,无论如何我都看不到 - 我总是在两个最终结果行中看到相同的日期时间值。
SELECT *
FROM (
SELECT 1 UNION ALL
SELECT 2
) AA ( A )
CROSS JOIN (
SELECT GETDATE() TEST_ID
) BB ( B )
SELECT *
FROM (
SELECT 1 UNION …Run Code Online (Sandbox Code Playgroud) sql-server-2008 ×10
sql-server ×7
backup ×1
dynamic-sql ×1
migration ×1
permissions ×1
security ×1
shrink ×1
statistics ×1
t-sql ×1
transaction ×1
trigger ×1
tuning ×1