标签: sql-server-2008-r2

基于日期的 SQL 排名

我试图根据过去 18 个月内的访问次数将客户与“首选”商家联系起来,决胜局是最近的访问日期。我在决胜局方面遇到了一些麻烦。如果有两条记录根据某个 MemberID 的访问次数均排名第 1,我想将该 MemberID 的记录上的 IsFirst 位列设置为 1。我该怎么做呢?

sql rank sql-server-2008-r2

0
推荐指数
1
解决办法
3万
查看次数

更改数据库中所有对象的排序规则

我需要更改已恢复数据库的排序规则以匹配服务器和 tempdb 数据库。我知道我可以使用 ALTER DATABASE 和 ALTER TABLE 来更改 collertion。但它只会影响添加到表中的新数据吗?我必须和

  • 重新创建用户数据库及其中的所有对象所需的脚本
  • 使用 bcp 实用程序等工具导出所有数据
  • 创建一个新数据库
  • 编写右侧集合中的表脚本并导入所有数据。

这是 Microsoft Sql Server 2008

sql-server sql-server-2008 sql-server-2008-r2

0
推荐指数
1
解决办法
4675
查看次数

数据库中已存在具有该名称的对象,但该对象不存在

我有一个名为的表dbo.ProductValue,我想我已经删除了它。现在,当我想创建一个具有该名称的表时ProductValue,它会显示错误:

数据库中已存在名为 dbo.ProductValue 的对象

但事实上它不存在或者至少我看不到它。我有sa访问权限。

尝试:

  • 我关闭并重新打开窗口
  • 我重新启动了MSSQLSERVER服务

请帮我解决这个问题。

sql sql-server-2008 sql-server-2008-r2

0
推荐指数
1
解决办法
5278
查看次数

SQL Server 2008 R2 中@@ 和@ 的区别

我正在使用 SQL Server 2008 R2。

我的问题是使用 @ 和 @@ 声明变量什么区别

在 SQL Server 2008 R2 中:

示例

语法 1:

Declare @a int = 1

select @a;
Run Code Online (Sandbox Code Playgroud)

语法 2:

Declare @@a int = 1

select @@a;
Run Code Online (Sandbox Code Playgroud)

两者都在这里做同样的工作。那为什么要使用双@@呢?

sql-server sql-server-2008-r2

0
推荐指数
1
解决办法
3666
查看次数

表达式类型数字对整理无效

我正忙于不同数据库之间的 SQL 中的 UNION ALL。

SELECT     CostValue AS [COST OF SALES], Customer AS [CUSTOMER CODE], DocumentType AS [DOCUMENT TYPE], Invoice AS [INVOICE NO], InvoiceDate AS [INVOICE DATE], 
                  DATEPART(dd, InvoiceDate) AS [INVOICE DAY], Mass AS MASS, NetSalesValue AS SALES, NetSalesValue - CostValue AS [GROSS PROFIT], OrderType, 
                  QtyInvoiced AS QUANTITY, SalesOrder, StockCode AS [STOCK CODE], TrnMonth AS [FIN MONTH], TrnYear AS [FIN YEAR], TrnYear * 100 + TrnMonth AS YYYYMM, 
                  'SHP' AS COMPANY
FROM         SomeCompanyA.dbo.SalesDetail
WHERE     (LineType = 1) AND (TrnYear >= …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

0
推荐指数
1
解决办法
2万
查看次数

为某些列选择DISTINCT,为其他列选择最小值(什么是`Group by`?)

我有一个TableA有两列的表:MyName nvarchar(100)MyDateTime DateTime.每个MyName具有不同DateTimes的记录可以有多个.我试图返回一个记录集,其中包含MyName表中的每个值,每个值最早MyDateTime.

这可以返回不同的MyNames:

SELECT DISTINCT([MyName]) FROM TableA
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的UNION语句,但我的所有尝试都被DISTINCT()关键字抛弃了.例如,以下查询会查找所有时间,而不仅仅是每个时间的最小值:

SELECT DISTINCT([MyName]), [MyDateTime] FROM TableA
Run Code Online (Sandbox Code Playgroud)

努力想出正确的SQL语法来实现这一目标.有什么帮助吗?

sql aggregate-functions sql-server-2008-r2

-1
推荐指数
1
解决办法
1663
查看次数

如何将数据从一个数据库表迁移到另一个SQL?

我对这整个SQL数据库迁移工作都很陌生,我已经准备好了.

我有2个不同的数据库,它们都有一个用户表,HtUser在一个目标数据库和HTUser源数据库中调用.

我想创建一个脚本,它复制源数据库中特定列的数据,这些列将在firstName, lastName, email和我的目标数据库中,FirstName, LastName, Email并且"特殊字段" UserName包含ch +两个字母firstName和来自的三个字母lastName.

    INSERT  INTO HolidayTracker.dbo.HtUser(FirstName,LastName,Email,UserName,AdAccount,AdDomain)
SELECT firstName,lastName,email,'CH'+LEFT(firstName,2)+LEFT(lastName,3),'EUROPE\'+LEFT(firstName,2)+LEFT(lastName,3),''
FROM HolidayTracker.dbo.HTUser U1
WHERE NOT EXISTS ( SELECT 1 FROM HolidayTracker.dbo.HTUser U2 WHERE U2.FirstName = U1.firstName AND U2.LastName = U1.lastName AND U2.email = U1.Email);








INSERT INTO HolidayTracker.dbo.HtUser(FirstName,LastName,Email,UserName,AdAccount,AdDomain)
SELECT firstName,lastName,email,'CH'+LEFT(firstName,2)+LEFT(lastName,3),'EUROPE\'+LEFT(fistName,2)+LEFT(lastName,3),''
FROM HolidayTracker.dbo.HTUser u1
    LEFT JOIN HolidayTracker.dbo.HtUser u2 ON u1.firstName = u2.FirstName AND u1.lastName = u2.LastName AND u1.email = u2.Email
    WHERE u2.FirstName IS NULL
    AND …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2008-r2

-1
推荐指数
1
解决办法
2400
查看次数

为什么即使使用ORDER BY子句,SQL查询也会返回未排序的行?

我读过的所有内容都说这不应该发生,但它会发生.我的数据库大小约为15GB,几百个表,表可以有几行到几百万.

这是发生的事情:假设我有一个表调用orders,第一列被调用,ID并且是表的主键.还有许多其他列,其中一列是命名的policy.如果我运行以下查询:

SELECT * 
FROM orders 
WHERE policy = 12345 
ORDER BY ID
Run Code Online (Sandbox Code Playgroud)

我希望结果看起来像这样:

1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)

但有时结果会如下所示:

1
2
4
5
3
6
Run Code Online (Sandbox Code Playgroud)

好像3被移到了不同​​的位置.这怎么/为什么会发生?

实际的查询是

SELECT * FROM loc_info WHERE PolInfo_ID=25634 ORDER BY LocInfo_ID
Run Code Online (Sandbox Code Playgroud)

表定义是

CREATE TABLE [dbo].[loc_info]( 
    [LocInfo_ID] [int] IDENTITY(1,1) NOT NULL, 
    [PolInfo_ID] [int] NOT NULL, 
    [name] [varchar](100) NOT NULL, 
    [address1] [varchar](100) NULL, 
    [address2] [varchar](100) NULL, 
    [city] [varchar](100) NULL, 
    [state] [varchar](100) NOT NULL, 
    [zip] [char](10) NULL, 
    [county] …
Run Code Online (Sandbox Code Playgroud)

sql sql-order-by sql-server-2008-r2

-1
推荐指数
1
解决办法
225
查看次数

使用VIEW,表或视图的同义词是否有任何优点?

几十年来我一直用VIEWs作为同义词:

CREATE VIEW dbo.Banks AS

SELECT *
FROM OtherDatabase.dbo.Banks
Run Code Online (Sandbox Code Playgroud)

我这样做,所以我可以抽象"真正的"表格.当它发生变化时,就像改变视图一样简单:

这很好用.它不会导致优化器出现任何问题,并且我能够根据需要编辑视图.

在此输入图像描述

同义词

从SQL Server 2005开始,Microsoft引入了同义词:

CREATE SYNONYM dbo.Banks FOR OtherDatabase.dbo.Banks
Run Code Online (Sandbox Code Playgroud)

似乎工作相同VIEW方式.我看过的每个执行计划都表现得相同.

不幸的是,似乎同义词无法提供我们需要的基本功能之一:

提供一个抽象层,用于保护客户端应用程序免受对基础对象的名称或位置所做的更改

您无法更改同义词指向的位置.因为没有ALTER SYNONYM语句,所以首先必须删除同义词,然后重新创建具有相同名称的同义词,但将同义词指向新位置.

他们有任何兑换质量吗?

实际上,这不会发生.我永远不会这样做.我不会使用一种机制,要求我从数据库中删除对象以更改设置.我当然不是要删除所有容易改变的观点,与替换它们的同义词,而且还得给大家讲解为什么使一切困难是"更好".

所以我的问题是,使用视图我有什么损失吗?

  • 每个执行计划看起来都与同义词相同
  • 我可以很容易地改变"视图同义词"随时

我缺少的表或视图同义词是否有美德?

除了必须打电话RefreshAllViews以防万一我忘记了我在某个地方换了一张桌子

甚至存储过程

我甚至不使用存储过程的同义词:

CREATE PROCEDURE dbo.GetUSDNoonRateAsOf @tradeDate datetime AS

EXECUTE OtherDatabase.dbo.GetUSDNoonRateAsOf @tradeDate
Run Code Online (Sandbox Code Playgroud)

我失踪的同义词中是否有值?

更新:RefreshAllViews过程

我们在每个数据库中都有一个标准程序.重新排序或插入列会对视图造成严重破坏; 所以他们必须"刷新".

CREATE PROCEDURE [dbo].[RefreshAllViews] AS

-- This sp will refresh …
Run Code Online (Sandbox Code Playgroud)

sql-server synonym sql-server-2008-r2

-1
推荐指数
1
解决办法
2094
查看次数

存储过程中接受永远不能工作的SQL Server查询

create procedure tempsproc
as 
    select t1.c1
    from #t 
    join t2 on #t.c2 = t3.c3
Run Code Online (Sandbox Code Playgroud)

select子句引用了from子句中未提及的表.我听说过延迟名称解析但我不知道无论运行时存在哪些表,上面的选择如何工作.

on子句还引用了from子句中未提及的表.

上面的SQL编译没有错误.

这个问题只在运行时出现 - 而不是你想要的

为了在编译时SQL Server拒绝上述过程,我需要做什么?

PS:这是在SQL Server 2008 R2 sp3系统上

sql t-sql sql-server sql-server-2008-r2

-1
推荐指数
1
解决办法
71
查看次数