我试图根据过去 18 个月内的访问次数将客户与“首选”商家联系起来,决胜局是最近的访问日期。我在决胜局方面遇到了一些麻烦。如果有两条记录根据某个 MemberID 的访问次数均排名第 1,我想将该 MemberID 的记录上的 IsFirst 位列设置为 1。我该怎么做呢?
我需要更改已恢复数据库的排序规则以匹配服务器和 tempdb 数据库。我知道我可以使用 ALTER DATABASE 和 ALTER TABLE 来更改 collertion。但它只会影响添加到表中的新数据吗?我必须和
这是 Microsoft Sql Server 2008
我有一个名为的表dbo.ProductValue
,我想我已经删除了它。现在,当我想创建一个具有该名称的表时ProductValue
,它会显示错误:
数据库中已存在名为 dbo.ProductValue 的对象
但事实上它不存在或者至少我看不到它。我有sa
访问权限。
尝试:
MSSQLSERVER
服务请帮我解决这个问题。
我正在使用 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 中的 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) 我有一个TableA
有两列的表:MyName nvarchar(100)
和MyDateTime DateTime
.每个MyName
具有不同DateTime
s的记录可以有多个.我试图返回一个记录集,其中包含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数据库迁移工作都很陌生,我已经准备好了.
我有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) 我读过的所有内容都说这不应该发生,但它会发生.我的数据库大小约为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) 几十年来我一直用VIEW
s作为同义词:
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)
我失踪的同义词中是否有值?
我们在每个数据库中都有一个标准程序.重新排序或插入列会对视图造成严重破坏; 所以他们必须"刷新".
CREATE PROCEDURE [dbo].[RefreshAllViews] AS
-- This sp will refresh …
Run Code Online (Sandbox Code Playgroud) 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系统上