小编Bij*_*ose的帖子

多列串联

如何将多列连接成一行?例如:

id   name    car
1    sam     dodge
1    ram     maserati
1    john    benz
1    NULL    mazda
2    kirk    lexus
2    Jim     rolls
1            GMC
Run Code Online (Sandbox Code Playgroud)

预期的结果集是:

ID  name               car
1   sam,ram,john       dodge,maserati,benz,mazda,GMC
2   kirk,jim           lexus,rolls
Run Code Online (Sandbox Code Playgroud)

使用我在 Stack Overflow 上找到的解决方案

SELECT * FROM (
SELECT t.id,stuff([m].query('/name').value('/', 'varchar(max)'),1,1,'') AS [SomeField_Combined1],
stuff([m].query('/car').value('/', 'varchar(max)'),1,1,'') AS [SomeField_Combined2]
FROM dbo.test t
OUTER apply(SELECT (

SELECT id, ','+name AS name
,','+car AS car
FROM test WHERE test.id=t.id
FOR XML PATH('') ,type)
             AS  M) A)S
GROUP BY …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql

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

使用条件动态创建临时表

我正在尝试使用以下代码动态创建一个临时表,并且我知道我们不能为同一个表创建两个创建语句。是否有解决方法可以像下面的代码一样以有条件的方式放置它。

CREATE PROC test @var1 CHAR(1)
as
BEGIN
IF(@var1 = X)
BEGIN 
SELECT * INTO #result
FROM TABLE1
END
IF(@var1 = Y)
BEGIN 
SELECT * INTO #result
FROM TABLE2
END
IF(@var1 = Z)
BEGIN 
SELECT * INTO #result
FROM TABLE3
END

SELECT * FROM #result r
END
Run Code Online (Sandbox Code Playgroud)

目标是最终有一个名为 #result 的表,其中包含基于变量 (@var1) 值的列

编辑 1: 因为这是使用动态 SQL 的一个很好的候选者,如下所示,但我将无法使用#result动态 SQL 范围之外的表,而这正是我需要的。

CREATE PROC test @var1 CHAR(1)
as
BEGIN
-- USING  dynamic sql
DECLARE @sql VARCHAR(MAX)
IF(@var1 = 'X')
BEGIN 
SET …
Run Code Online (Sandbox Code Playgroud)

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

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

如何使用 xp_fixeddrives 创建存储过程?

我需要一个存储过程来检查 2 个链接服务器中的可用空间。(服务器是手动链接的)。我想出了这样的查询并使用 sql server 2008

ALTER PROCEDURE freespace
AS
BEGIN
    CREATE Table #freespace(drive VARCHAR(50),freedrivespace VARCHAR(50));
    DECLARE @servername VARCHAR(50);
    DECLARE @sql VARCHAR(100);
    DECLARE @space  CURSOR;
    SET @space= CURSOR FOR
    SELECT Name FROM SERVERNAME;
    OPEN @space;
    FETCH NEXT
    FROM @space INTO @servername;
    WHILE @@FETCH_STATUS=0
    BEGIN


    SET @sql = '['+@servername+']...xp_fixeddrives';
    INSERT INTO #freespace
    EXEC(@sql);
    FETCH NEXT FROM @space INTO @servername;
    END
    CLOSE @space;
    DEALLOCATE @space;
END
Run Code Online (Sandbox Code Playgroud)

servername表由链接服务器的 servername 组成,如 server1、server2。

当我运行此查询时,会显示如下错误:

Msg 7202, Level 11, State 2, Line 1
Could …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures t-sql

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

如何提高使用 LIKE %abc 的 where 子句的性能?

我有下面的 select 语句,结果非常慢(41 秒)

SELECT DISTINCT a.Doc_Resource_ID 
       ,a.Parent_ID 
       ,a.Logical_Path 
       ,a.lvl 
       ,CAST(SUBSTRING(a.Security_Level, 21, 1) AS TINYINT)
  FROM Doc_ACL_Detail_D a   
 WHERE a.UserId = @I_vUserId 
   AND @I_vParentId = 0 
    OR (Logical_Path LIKE(CASE 
                             WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId)) 
                          END)
    OR Logical_Path LIKE(CASE 
                            WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId))+'-%' 
                         END ))
OPTION (MAXRECURSION 5000)
Run Code Online (Sandbox Code Playgroud)

我已经为表创建了非聚集索引Doc_ACL_Detail_D,但执行计划仍然是表扫描。

我创建的索引:

    CREATE NONCLUSTERED INDEX idx_Doc_ACL_Detail_D_UserId_Logical_Path 
       ON [dbo].[Doc_ACL_Detail_D] ([UserId],[Logical_Path])
  INCLUDE (Parent_ID,Doc_Resource_ID,lvl,Security_Level)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我优化这个语句吗?十分感谢。

performance index sql-server select like

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

单个查询返回单个记录中不同 ID 的计数

select count(title_id)as algodata from titles where pub_id =1389  
select count(title_id)as binnet   from titles where pub_id =0877  
select count(title_id)as newmoon  from titles where pub_id =0736
Run Code Online (Sandbox Code Playgroud)

使用的数据库pubs在 SQL Server 中。

我可以使用单个查询来显示单个记录中每个发布者(这里有 3 个发布者)的记录数吗?

sql-server query select

3
推荐指数
3
解决办法
2760
查看次数

剖析连接

最近我在dba.stackexchange 中问了一个问题,这个问题是关于 sql 中的数据层次结构的,一个叫chris allen 的人回答了这个问题,我真的很喜欢它,但是当我试图理解这个查询时,我更加困惑了。

这是查询:

Res_id  Res_name         Man_id
1           sam             3
2           Biju            4
3           adrian          Null
4           Helen           3
5           Micah           4


select  
 level1.res_name as level1,
 level2.res_name as level2,
 level3.res_name as level3,
 level4.res_name as level4,
 level5.res_name as level5

from resource as level1
left join resource as level2 on level1.res_id=level2.man_id
left join resource as level3 on level2.res_id=level3.man_id
left join resource as level4 on level3.res_id=level4.man_id
left join resource as level5 on level4.res_id=level5.man_id

where …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

sp_Updatestats 的问题

我在我的数据库上运行 sp_updatestats 时遇到问题它会在我的 emp 表更新和断开连接时生成错误我将在此处粘贴错误

Updating [dbo].[emp]
Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command.  The results, if any, should be discarded.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command.  The results, if any, should be discarded.
Run Code Online (Sandbox Code Playgroud)

是不是因为当我运行 DBCC checktable(emp) 时表有任何问题,它没有显示任何问题。那么是什么原因

更新:
我们如何在不安装@gbn 提到的服务包的情况下找到问题的根本原因,我们如何消除它。如果问题发生在安装了 sp2 的版本中,如果它发生在生产服务器中并且安装 Service Pack 是解决它的唯一方法,作为 dba 我们可以做什么?

sql-server statistics

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

如何为主键创建规则

我正在使用 SQL Server 2005,我需要创建一个带有字母字符和 3 个数字的主键:

    p001
    b201
Run Code Online (Sandbox Code Playgroud)

我知道我需要创建一个规则并将该规则绑定到主键列。我在使用LIKE查询创建规则时有点困惑:

CREATE RULE pK-rule AS @pk LIKE'[a-z][0-9][0-9][0-9]'
Run Code Online (Sandbox Code Playgroud)

有人可以建议我需要改变什么吗?

sql-server-2005 sql-server constraint primary-key

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

SQL Server 如何从开始日期和结束日期在 6 个月前的表中进行选择

所以我有一个表,其中包含以下 select 语句中列出的一些列。

SELECT [AccountName], 
       [AccountNumber], 
       [Tenor], 
       [Currency], 
       [TotalCredit], 
       [TotalDebit], 
       [CreditCount], 
       [DebitCount], 
       [AccountBalance], 
       [StatementStartDate], 
       [StatementEndDate] 
  FROM [TAF.EligibilityService].[dbo].[AccountStatements]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想使用StatementStartDateStatementEndDate选择 6 个月前和今天之间存在的记录。

例如,如果开始日期是 1 年前,只要结束日期还在 6 个月前,就应该返回记录。

提前致谢。

sql-server

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

在 SQL Server 2005 中转义单引号

我正在使用 SQL Server 2005 并使用 Northwind 数据库。我需要祖母凯利宅基地的供应商 ID,我使用了以下查询:

select supplierid from suppliers
where companyname ='Grandma Kelly''s'' Homestead'
Run Code Online (Sandbox Code Playgroud)

我检查了在 SQL Server 中转义单引号的链接,但找不到答案。

我使用了两个单引号但它不起作用,因为查询正在执行但它没有返回值。

如何转义单引号并检索值?我还想知道如何将值插入带有引号的表中

sql-server

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