有没有办法纯粹在 T-SQL 中从现有表生成创建脚本(即不使用 SMO,因为 T-SQL 无法访问 SMO)。假设一个存储过程接收一个表名并返回一个包含给定表的创建脚本的字符串?
现在让我描述一下我面临的情况,因为可能有不同的方法来解决这个问题。我有一个包含几十个数据库的实例。这些数据库都具有相同的架构、相同的表、索引等。它们是作为第三方软件安装的一部分创建的。我需要有一种与他们合作的方法,以便我可以以特别的方式从他们那里收集数据。dba.se 的好人已经在这里帮助了我如何在不同的数据库中创建触发器?
目前我需要找到一种方法来从所有数据库的表中进行选择。我已将所有数据库名称记录到一个名为的表中,Databasees并编写了以下脚本来对所有数据库执行 select 语句:
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
select * into #tmp from Database1.dbo.Table1 where 1=0
DECLARE @statement nvarchar(max) =
N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1'
DECLARE @LastDatabaseID INT
SET @LastDatabaseID = 0
DECLARE @DatabaseNameToHandle varchar(60)
DECLARE @DatabaseIDToHandle int
SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No
WHILE @DatabaseIDToHandle …Run Code Online (Sandbox Code Playgroud) 查看特定登录的属性时,可以看到映射到该登录的用户列表:

我分析了 SQL Server Management Studio (SSMS),我看到 SSMS 一次连接到每个数据库并从 sys.database_permissions 检索信息
是否可以编写一个查询来检索上面显示的用户映射信息,或者我是否被迫使用游标或 sp_MSforeachdb 或类似的东西?
问题
在 SQL Server 中,我总是发现获取数据集的最大行数很痛苦,我正在寻找一个方法列表来检索最大行数,并提供一些有关性能和可维护性的指导。
示例表:
DECLARE @Test TABLE (ID INT IDENTITY(1,1), name VARCHAR(50),
dateOfBirth DATETIME, TaxNumber varchar(10))
INSERT INTO @Test (name, dateOfBirth, TaxNumber)
SELECT 'Fred', convert(datetime, '25/01/1976', 103), '123' UNION ALL
SELECT 'Bob', convert(datetime, '03/03/1976', 103), '234' UNION ALL
SELECT 'Jane', convert(datetime, '13/06/1996', 103), '345' UNION ALL
SELECT 'Fred', convert(datetime, '14/02/1982', 103), '456' UNION ALL
SELECT 'Bob', convert(datetime, '25/10/1983', 103), '567' UNION ALL
SELECT 'Jane', convert(datetime, '12/04/1995', 103), '678' UNION ALL
SELECT 'Fred', convert(datetime, '03/03/1976', 103), '789'
select * from …Run Code Online (Sandbox Code Playgroud) 我们使用 SQL 身份验证(以减少连接池的数量)和 .NET 4.0 连接字符串连接到 Windows 2008 R2 Enterprise Server 上的 SQL Server Enterprise Edition 2012 SP1:
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
2012 年 10 月 19 日 13:38:57
版权所有 (c) Microsoft Corporation
Enterprise Edition(64 位)在 Windows NT 6.1(Build 7601:Service Pack 1)上
我们使用大约 50 个服务器分成 8 个不同的组,网站的不同部分。
我们的网站正在使用此 SQL Server 来记录访问跟踪数据。在过去的几天里,它发出了有关重置连接池的以下消息:
客户端无法重用 SPID 1327 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
错误日志如下:
错误:18056,严重性:20,状态:46
。客户端无法重用 SPID 959 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
用户“xxxx”登录失败。原因:重新验证连接上的登录时,无法打开登录对象中配置的数据库“xxxxxxxx”。[客户:10.xx.xx.xxx]
经过一番挖掘,我在 CSS 博客上找到了这篇文档:它是如何工作的:错误 18056 – 客户端无法重用带有 SPID …
有没有办法将维护计划从一个 SQL Server 2012 复制到另一个?无法同时(在不同网络上)通过相同的 Management Studio 副本访问两台服务器。
我在 MSDN 的下拉列表中找到了一个名为SQL Server "Denali"的新标题,但我没有找到太多关于它的信息:
是否有人对此版本中的新功能或重大错误修复有更详细的信息?我希望有人使用过或测试过它。
RDBMS 系统是否针对COMMIT操作进行了优化?ROLLBACK操作慢/快多少?为什么?
我正在创建一个临时表 ( #myTable) 并使用游标。当并发用户通过我的应用程序访问游标时,这会产生问题吗?它是否允许我创建具有相同名称的单独临时表?
以下是示例代码:
Open cursor;
Fetch Next from cursor into @Variable_Temp_Table_Name;
Create table #myTable(pk int)
While @@Fetch_Status = 0
Begin
Fetch Next from cursor into @Variable_Temp_Table_Name;
End
Run Code Online (Sandbox Code Playgroud) 在 SQL Server 中,统计信息会在Auto Update Statistics进入时自动更新True(这是默认设置)。是否有理由在什么情况下手动更新统计信息?
sql-server ×6
career ×1
cursors ×1
dynamic-sql ×1
features ×1
index ×1
logins ×1
maintenance ×1
performance ×1
permissions ×1
rdbms ×1
rollback ×1
security ×1
statistics ×1
t-sql ×1
transaction ×1