我想将我在存储过程和其他内容上设置的所有权限从我的开发数据库复制到我的生产数据库.通过SSMS GUI工具手动执行此操作非常麻烦,更不用说容易出错了.
所以我正在寻找一种方法可以直接转储在一个数据库中设置的权限,并将这些相同的权限应用于单独的数据库(可能具有相同的模式).
我正在尝试构建一个映射表,以将表中新行的ID与它们从中复制的ID相关联.OUTPUT INTO子句似乎是完美的,但它似乎没有按照文档行事.
我的代码:
DECLARE @Missing TABLE (SrcContentID INT PRIMARY KEY )
INSERT INTO @Missing
( SrcContentID )
SELECT cshadow.ContentID
FROM Private.Content AS cshadow
LEFT JOIN Private.Content AS cglobal ON cshadow.Tag = cglobal.Tag
WHERE cglobal.ContentID IS NULL
PRINT 'Adding new content headers'
DECLARE @Inserted TABLE (SrcContentID INT PRIMARY KEY, TgtContentID INT )
INSERT INTO Private.Content
( Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, OrgUnitID )
OUTPUT cglobal.ContentID, INSERTED.ContentID INTO @Inserted (SrcContentID, TgtContentID)
SELECT Tag, Description, ContentDate, DateActivate, DateDeactivate, …
Run Code Online (Sandbox Code Playgroud) 为什么列标准合法ORDER BY
但不适用GROUP BY
?也就是说,任何人都可以告诉我为什么这个查询
SELECT OrgUnitID, COUNT(*) FROM Employee AS e GROUP BY OrgUnitID
Run Code Online (Sandbox Code Playgroud)
不能写成
SELECT OrgUnitID, COUNT(*) FROM Employee AS e GROUP BY 1
Run Code Online (Sandbox Code Playgroud)
当写一个像这样的查询是完全合法的
SELECT OrgUnitID FROM Employee AS e ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
?
我真的很想知道关系微积分是否存在一些微妙的东西,这会阻止分组正常工作.
问题是,我的例子非常简单.通常我想要分组的列实际上是一个计算,并且必须在GROUP BY中重复完全相同的计算是(a)烦人和(b)更有可能在维护期间产生错误.这是一个简单的例子:
SELECT DATEPART(YEAR,LastSeenOn), COUNT(*)
FROM Employee AS e
GROUP BY DATEPART(YEAR,LastSeenOn)
Run Code Online (Sandbox Code Playgroud)
我认为,规范化的SQL的规则,只表示数据在数据库中一次应该扩展到代码.我想只对这个计算表达式做一次(在SELECT
列列表中),并且能够通过序数引用它GROUP BY
.
澄清:我专门研究SQL Server 2008,但我想知道总体答案.