小编Dib*_*tar的帖子

删除实例的所有临时表

我想知道如果有可能有一个查询丢弃所有临时表?

我一直在尝试使用tempdb.sys.tables来解决问题,但我正在努力格式化name列以使其可以被删除 - 另一个使得事情变得有点棘手的因素通常是临时表名包含一个'_'意味着做一个替换变得更加繁琐(对我来说至少!)

有什么我可以使用它会删除所有临时表(本地或全局)而不必在命名的基础上单独删除它们?

谢谢!

sql sql-server sql-server-2005

10
推荐指数
3
解决办法
5万
查看次数

如何在SQL中过滤每组中前1%和下1%的数据

我有一个数据集,包括PRICE,SUBTYPE和其他.我想在使用数据集之前先删除异常值.我希望在每个SUBTYPE中删除价格高得离谱或低价的行.

对于每个SUBTYPE,查看PRICE的范围并删除或过滤掉行.保持介于两者之间的行:PRICErange*.01 | KEEP | PRICErange*.99

这是由Martin Smith在stackoverflow上提供给我的,我编辑了这个问题,所以让我们从这里开始.

;WITH CTE       
AS (SELECT *,                   
ROW_NUMBER() OVER (PARTITION BY SUBTYPE ORDER BY PRICE) AS RN,                    
COUNT(*) OVER(PARTITION BY SUBTYPE) AS Cnt             
FROM    all_resale)    
SELECT *    
FROM   CTE    
WHERE (CASE WHEN Cnt > 1 THEN 100.0 * (RN -1)/(Cnt -1) END) BETWEEN 1 AND 99
Run Code Online (Sandbox Code Playgroud)

我不确定这是我需要做的.我不知道将从末端删除多少行.

sql sql-server-2008

7
推荐指数
1
解决办法
159
查看次数

SQL查询(可能与pivot/unpivot解决?)

我不确定如何最好地解决这个问题 - 我认为应该使用pivot/unpivot,但不确定如何使其工作(因为旋转列是非数字的)

我有下表(基于我无法修改的查询):

CREATE TABLE #data 
(donor_id NVARCHAR(50)
,last_gift DATETIME
,[2005] NVARCHAR(50)
,numgifts05 INT
,value_05 MONEY
,[2006] NVARCHAR(50)
,numgifts06 INT
,value_06 MONEY
,[2007] NVARCHAR(50)
,numgifts07 INT
,value_07 MONEY
,[2008] NVARCHAR(50)
,numgifts08 INT
,value_08 MONEY
,[2009] NVARCHAR(50)
,numgifts09 INT
,value_09 MONEY
,[2010] NVARCHAR(50)
,numgifts10 INT
,value_10 MONEY
)


INSERT INTO #data VALUES  (001,'2000-03-23 00:00:00.000','lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES  (002,'2006-08-01 00:00:00.000','reactivated donor',1,25.00,'2yrs consecutive',2,47.20,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES  (003,'2010-02-12 00:00:00.000','non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'new donor',2,112.50,'2yrs consecutive',1,116.08) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server pivot sql-server-2005

6
推荐指数
1
解决办法
373
查看次数

识别将在插入查询中截断的值

我试图将一些数据插入表中,我收到了错误消息

Msg 8152, Level 16, State 14, Line 1
String or binary data would be truncated.
Run Code Online (Sandbox Code Playgroud)

现在我知道这是因为尝试插入对于列太大的数据(在这种情况下是VARCHAR(50)),但它让我思考是否可能:

a)看看哪些特定值会被截断(请记住,这可能发生在多列中),也许是通过给出将被截断的所有行的输出?

b)如果在批量插入中有任何方法可以查看每列将被截断的最大输入数据值(因此我可以看到数据存储类型是否实际需要更改,或者是否只有一两个案例会不适合列?)

t-sql sql-server sql-server-2005

6
推荐指数
1
解决办法
8492
查看次数

选择仅出现在两个表之一中的数据的最佳方法是什么?

如果我有两个这样的表:

CREATE TABLE #table1 (id INT, name VARCHAR(10))
INSERT INTO #table1 VALUES (1,'John')
INSERT INTO #table1 VALUES (2,'Alan')
INSERT INTO #table1 VALUES (3,'Dave')
INSERT INTO #table1 VALUES (4,'Fred')
CREATE TABLE #table2 (id INT, name VARCHAR(10))
INSERT INTO #table2 VALUES (1,'John')
INSERT INTO #table2 VALUES (3,'Dave')
INSERT INTO #table2 VALUES (5,'Steve')
Run Code Online (Sandbox Code Playgroud)

我希望看到所有行只出现在其中一个表中,最好的方法是什么?

我能想到的是:

SELECT * from #table1 except SELECT * FROM #table2
UNION
SELECT * from #table2 except SELECT * FROM #table1
Run Code Online (Sandbox Code Playgroud)

或者类似的东西:

SELECT id,MAX(name) as name  FROM
(
SELECT *,1 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server select sql-server-2005

5
推荐指数
1
解决办法
208
查看次数

确定锁升级的阈值

我有一个包含大约 250 万条记录的表,将更新大约 70 万条记录,并且希望在更新这些记录的同时仍允许其他用户查看数据。我的更新语句如下所示:

UPDATE A WITH (UPDLOCK,ROWLOCK)
SET A.field = B.field
FROM Table_1 A
INNER JOIN Table2 B ON A.id = B.id WHERE A.field IS NULL
AND B.field IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以解决 sql server 在什么时候升级更新语句上的锁(因为我不希望整个表被锁定)?

我没有权限运行服务器跟踪来查看锁是如何应用的,那么有没有其他方法可以知道锁将在什么时候升级以覆盖整个表?

谢谢!

sql sql-server sql-server-2005

4
推荐指数
1
解决办法
6334
查看次数

使用日期范围可能的递归CTE查询

不知道如何在这一个上标题!

我有以下数据:

IF OBJECT_ID ('tempdb..#data') IS NOT NULL DROP TABLE #data
CREATE TABLE #data
(
id UNIQUEIDENTIFIER
,reference NVARCHAR(30)
,start_date DATETIME
,end_date DATETIME
,lapse_date DATETIME
,value_received DECIMAL(18,3)
)

INSERT INTO #data VALUES ('BE91B9C1-C02F-46F7-9B63-4D0B25D9BA2F','168780','2006-05-01 00:00:00.000',NULL,'2011-09-27 00:00:00.000',537.42)
INSERT INTO #data VALUES ('B538F123-C839-447A-B300-5D16EACF4560','320858','2011-08-08 00:00:00.000',NULL,NULL,0)
INSERT INTO #data VALUES ('1922465D-2A55-434D-BAAA-8E15D681CF12','306597','2011-04-08 00:00:00.000','2011-06-22 13:14:40.083','2011-08-07 00:00:00.000',12)
INSERT INTO #data VALUES ('7DF8FBCC-B490-4892-BDC5-8FD2D73B0323','321461','2011-07-01 00:00:00.000',NULL,'2011-09-25 00:00:00.000',8.44)
INSERT INTO #data VALUES ('1EC2E754-F325-4313-BDFC-9010E255F6FE','74215','2000-10-31 00:00:00.000',NULL,'2011-08-30 00:00:00.000',258)
INSERT INTO #data VALUES ('9E59B09C-0198-48AC-8EEC-A0D76CEA9385','169194','2008-06-25 00:00:00.000',NULL,'2011-09-25 00:00:00.000',1766.4)
INSERT INTO #data VALUES ('97CF6C0F-324A-49A6-B9D8-AC848A1F821A','288039','2010-09-01 00:00:00.000','2011-07-29 00:00:00.000','2011-08-21 00:00:00.000',55)
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 common-table-expression

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