我正在使用 WMI 来获取服务器本地组的成员以及成员的 SID。WQL 查询适用于本地用户、本地组、AD 域用户和 AD 域组的成员。但是,当脚本查看恰好与 SQL Server 相关的成员时,它在它认为应该查看的类中找不到对象,因此我没有得到成员的 SID。例如,以下是为碰巧与 SQL Server 相关的组成员动态构造的一些查询:
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLBrowser'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MsDtsServer100'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$SQLEXPRESS'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSSQL$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSOLAP$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='ReportServer$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$EPROVISIONAPP'
Run Code Online (Sandbox Code Playgroud)
上面的查询不返回任何结果,即使这些成员的 PartComponent …
我有两张桌子
[LocatioNo],[LocationName],[Description])[LocationNo],[LocationCode],[DDate],[BillNo],[Model],[Quantity],[SNo])
(来源:staticflickr.com)
](http://www.flickr.com/photos/77377790@N08/6782618850 “点击查看Flickr”)
以及涉及在 SQL Server 2000 中创建的 2 个表的视图
CREATE VIEW [dbo].[QueryLocation]
AS
SELECT TOP (100) PERCENT
dbo.LocationData.LocationNo, dbo.LocationData.LocationCode,
dbo.LocationData.DDate, dbo.LocationData.BillNo,
dbo.LocationData.Model,
SUM(dbo.LocationData.Quantity) AS Quantity,
dbo.LocationMaster.LocationName
FROM
dbo.LocationData
INNER JOIN
dbo.LocationMaster ON dbo.LocationData.LocationNo = dbo.LocationMaster.LocatioNo
GROUP BY
dbo.LocationMaster.LocationName, dbo.LocationData.LocationNo,
dbo.LocationData.LocationCode, dbo.LocationData.DDate, dbo.LocationData.BillNo,
dbo.LocationData.Model ORDER BY dbo.LocationData.BillNo
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2000 中执行以下查询时,网格中的结果按billno列排序。
SELECT * FROM QueryLocation
Run Code Online (Sandbox Code Playgroud)

(来源:staticflickr.com)
](http://www.flickr.com/photos/77377790@N08/6782618858 “点击查看 Flickr”)
升级到 SQL Server …
我有一个带有全文索引的 SQL Server 数据库。当我创建使用它的应用程序时,我对数据库进行了备份,并将.BAK文件与应用程序一起发送。作为应用程序安装的一部分,它会还原此.BAK文件。我喜欢这个选项,因为它为我自动创建所有表,使用一些表需要的默认行,并且还包括全文索引。好看又简单。
现在我需要添加一个备份/恢复功能,最终用户希望它更像一个 MS Office 应用程序而不是一个客户端/服务器应用程序。他认为它是一个文件,只想备份到一个文件,然后随时恢复……不是典型的 SQL Server 备份,也不是自动化的,只是简单的“复制”备份,没有附加/备份集/等等。
我正在考虑使用BACKUP DATABASETSQL 命令,他不介意它只保存到服务器上的文件夹中。然后用restore databaseTSQL 命令恢复——我目前用于初始安装的命令。
我遇到了一个问题,这是我的问题。我有一个版本号,我在表中连续保存一个版本号,我用它来避免旧应用程序连接到新数据库,反之亦然。我想在允许恢复之前检查这个版本。我知道它是否是.MDF我可以附加到它并在恢复之前检查的文件,但是我可以使用备份 ( .BAK) 文件来执行此操作吗?
我是否错过了更适合我的设计的更好的备份/恢复方法?例如,我是否应该分离.MDF文件并复制它和日志文件作为备份,然后将其附加为“恢复”过程?这会像备份/恢复那样保留所有内容,包括全文索引吗?
我使用的是 SQL Server 2008 Express,我的应用程序是 C# .NET 3.5。
编辑:当其他用户在数据库中时不需要进行备份,如果需要独占访问就可以了,它只是一个有几个人的小办公室,如果需要可以轻松关闭。
我每周两次使用 Visual Studio DB 项目重新创建我的开发数据库。
今天,我将我的权限固定为基于 Active Directory 组,而不是授予个人权限。
在我重新运行我的构建后,我注意到一个域/Windows 使用仍在那里。我搜索了整个数据库项目,但在任何地方都找不到该用户。
所以为了测试,我创建了一个不同的数据库(即 MyDummyDb)。果然用户也被添加到该数据库中。
该用户甚至没有有效的登录名(我也将登录名更改为基于 AD 组)。
所以我必须假设有一个服务器级别的设置来控制哪些用户被自动添加到新数据库中。
这是正确的吗?有谁知道这个设置在哪里?
我用Hyper-v安装了一台windows 2008服务器机器,然后复制镜像创建另一台并更改计算机名称,它们都在同一个域中,我使用域用户作为管理员来配置它们。
安装 SQL Server 2008 后,我尝试了以下 T-SQL:
SET XACT_ABORT ON
GO
BEGIN DISTRIBUTED TRANSACTION
EXEC CatalogSQLServer.Catalog.dbo.Hello
ROLLBACK
Run Code Online (Sandbox Code Playgroud)
我第一次尝试?我得到的错误信息如下:
链接服务器 '' 的 OLE DB 提供程序 'SQLNCLI' 返回消息 '没有活动的事务
我 100% 确定我已配置 DTC、链接服务器并允许防火墙的所有入站和出站规则。我根据这些说明配置了MSDTC。
之后,我尝试使用命令:
msdtc -uninstall
msdtc -install
Run Code Online (Sandbox Code Playgroud)
...然后重新启动 dtc 以在 CatalogSQLServer 上重新安装 msdtc。但这一次,当我执行测试脚本时,SSMS会一直执行很长时间但没有得到任何结果。有谁知道如何解决这个问题?
我想在将更长的 varchar 分配给变量并且没有静默截断时出现错误。有什么设置吗?
这将无声地截断:
declare @code varchar(10)
set @code = 'This is too long'
select @code
Run Code Online (Sandbox Code Playgroud)
将 varchar 插入较小的 Table 列
create table test (col1 varchar(10));
insert into test values ('This is too long');
Run Code Online (Sandbox Code Playgroud)
产生错误:
Meldung 8152, Ebene 16, Status 14, Zeile 2
String or binary data would be truncated.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud) 我有一个签名的存储过程,它创建一个新数据库、一个新登录名并将新用户分配为新数据库的所有者。那么我的存储过程会创建新的登录名和新数据库,但不会将新用户分配为新数据库的所有者。存储过程位于应用程序数据库中,而不是 master。
我得到的错误是:
找不到主体“BlahUser”,因为它不存在或您没有权限。
存储过程在具有有限权限(在存储过程上执行)的不同登录名 (simpleUser) 下执行。
证书用户具有以下权限:
有问题的代码是:
SET @sqlStmt = 'ALTER AUTHORIZATION ON DATABASE::'+@sessionid+'Data TO ['+@orgName+'User]'
SET @metasql = '
USE [master]
EXEC (''' + REPLACE(@sqlStmt, '''', '''''') + ''')
'
EXEC sp_executesql @metasql
Run Code Online (Sandbox Code Playgroud)
我尝试像这样将执行用户(simpleUser)的模拟授予存储过程中的新用户,但它也会导致错误。我不确定创建其他用户的用户是否可以自动模拟他们。
SET @sqlStmt = 'GRANT IMPERSONATE ON LOGIN::'+@orgName+'User TO simpleUser';
SET @metasql = '
USE [master]
EXEC (''' + REPLACE(@sqlStmt, '''', '''''') + ''')
'
EXEC sp_executesql @metasql
Run Code Online (Sandbox Code Playgroud) 所以我的老板和我在如何最好地设计我们的数据库以存储某些客户的杂项数据存在分歧。
基本上,我们有一堆类似于此格式的表格(为简单起见,使用伪代码):
TABLE [dbo].[SalesData]
[CampaignID] int IDENTITY(1, 1) NOT NULL, (This is the PK)
[CustomerID] int NULL,
[Calls] float NULL,
[Responses] float NULL,
[Sales] float NULL,
[Revenue] money NULL,
[Cost] money NULL,
[WebSales] float NULL,
[Channel] nvarchar(20) NULL
Run Code Online (Sandbox Code Playgroud)
发生的情况是,随着我们获得客户,我们有时被迫为每个客户添加某种自定义数据收集。对于此表,除了 WebSales 和 Channel 仅用于 1 个客户端之外,每个客户端都使用所有内容(我们有大约 20 个)。另一个客户想要跟踪几条新数据,因此,我们要么需要添加更多列,要么将这些数据分拆到相关表中并启动超类型-子类型系统。
我想做的也是剥离 WebSales 和 Channel,并以这种方式为每个客户添加一个表:
TABLE [dbo].[SalesData_Client1]
[CampaignID] int NOT NULL, (PK and FK to the SalesData table)
[WebSales] float NOT NULL DEFAULT 0,
[Channel] nvarchar(20) NOT NULL DEFAULT ''
ADD CONSTRAINT [CK__SalesData_Client1__CustomersCampaignID]
CHECK …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序数据库的复制副本。我正在探索如何更改约束和索引以更好地满足我们的报告要求。因为这是应用程序数据库的副本,所以我知道参照完整性正在检查中。
此副本中的主键和外键关系有何影响?如果我仔细设置我需要的索引,外键有什么好处吗?有什么害处吗?
我有一些业务部门,如印度、国际、美国、英国。
我必须:
SP_Report结果集匹配的列创建表变量(虚拟内存表)SP_Report并将数据插入到表变量中代码:
declare @K table (BU nvarchar(max), K nvarchar(max),Y money, A money, D money, YP money)
declare @FY int
declare @BU nvarchar(max)
INSERT INTO @K (BU, K, Y, A, D, YP)
EXEC dbo.SP_Report '2012', 'India'
SELECT * FROM @K
Run Code Online (Sandbox Code Playgroud)
此代码返回表变量的结果。现在我必须使用它游标,我不知道如何使用。我怎样才能解决同样的问题。