相关疑难解决方法(0)

nvarchar concatenation/index/nvarchar(max)莫名其妙的行为

我今天在SQL Server(2008R2和2012)中遇到了一个非常奇怪的问题.我正在尝试使用串联和select语句来构建字符串.

我找到了解决方法,但我真的很想了解这里发生了什么以及为什么它没有给我预期的结果.有人可以向我解释一下吗?

http://sqlfiddle.com/#!6/7438a/1

根据要求,这里的代码也是:

-- base table
create table bla (
    [id] int identity(1,1) primary key,
    [priority] int,
    [msg] nvarchar(max),
    [autofix] bit
)

-- table without primary key on id column
create table bla2 (
    [id] int identity(1,1),
    [priority] int,
    [msg] nvarchar(max),
    [autofix] bit
)

-- table with nvarchar(1000) instead of max
create table bla3 (
    [id] int identity(1,1) primary key,
    [priority] int,
    [msg] nvarchar(1000),
    [autofix] bit
)

-- fill the three tables with the same values …
Run Code Online (Sandbox Code Playgroud)

sql-server nvarchar string-concatenation sql-server-2012

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

如何在它们之间用逗号制作T-SQL结果列表?

假设我们有一个像这样的简单查询:

SELECT x 
FROM t
WHERE t.y = z
Run Code Online (Sandbox Code Playgroud)

如果我们在结果集中有一条记录,我想将变量@v设置为该值.如果我们有两个或更多记录,我希望结果用逗号和空格分隔.编写此T-SQL代码的最佳方法是什么?

例:

结果集1条记录:

Value1
Run Code Online (Sandbox Code Playgroud)

结果集2条记录:

Value1, Value2
Run Code Online (Sandbox Code Playgroud)

结果集3条记录:

Value1, Value2, Value3
Run Code Online (Sandbox Code Playgroud)

sql t-sql comma sql-server-2008

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

SQL删除自动约束

我用脚本在我的表上创建了一些约束而没有指定约束名.结果,我最终遇到了限制FK__DOC_OBGS___kntr___54E63309,例如.

是否可以在不指定确切约束名称的情况下删除约束?

例如,像这样的东西(不起作用)

ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%'
Run Code Online (Sandbox Code Playgroud)

问题是我们有很多数据库与这个表,我需要从表中删除所有约束,但显然每个表的名称是不同的.

sql sql-server constraints

10
推荐指数
2
解决办法
2973
查看次数

SQL Server选择结果为字符串,以','分隔

我有一个select返回一列的查询,我想将其转换为以','分隔的字符串行

Select name 
from tblUsers
Run Code Online (Sandbox Code Playgroud)

给出结果:

Row1; asieh
Row2:amir
Row3:safoora
Run Code Online (Sandbox Code Playgroud)

我想回来

Row1: asieh,amir,safoora
Run Code Online (Sandbox Code Playgroud)

sql-server

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

SQL Server,我如何转置列的数据

可能重复:将
多行连接成一个文本字符串?

我有一个问题

SELECT city FROM cityTable
Run Code Online (Sandbox Code Playgroud)

它返回

delhi
faridabad
haryana
mathura
kerla
Run Code Online (Sandbox Code Playgroud)

我只想把结果转换成类似的东西

delhi | faridabad | haryana | mathura | kera
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

sql t-sql sql-server

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

将多行合并为一行并组合列SQL

我试图让这个视图查询两个表,然后将每个程序ID汇总到一行,其中AttributeNames列中的所有AttributeNames一起

我加入了这两个表,它提取了适当数量的记录.
现在,我需要的部分就是将每个ProgramID和一个所有AttributeNames一起放在每个id的AttributeNames列中.

示例:全部在一行中.

ProgramID      | AttributeNames
887            | Studydesign, Control Groups, Primary Outcomes.
Run Code Online (Sandbox Code Playgroud)

这是我需要修改的SQL VIEW的图像,所以它执行此操作: 在此输入图像描述

查询:

SELECT TOP (100) PERCENT dbo.tblProgramAttributes.ProgramID,
       dbo.tblProgramAttributes.AttributeID AS PAattributeID, 
       dbo.tblAttributes.AttributeID, 
       dbo.tblAttributes.AttributeName
FROM   dbo.tblProgramAttributes INNER JOIN
       dbo.tblAttributes 
ON     dbo.tblProgramAttributes.AttributeID = dbo.tblAttributes.AttributeID
WHERE (dbo.tblProgramAttributes.AttributeID NOT LIKE '%ProgramType%')
ORDER BY dbo.tblProgramAttributes.ProgramID DESC
Run Code Online (Sandbox Code Playgroud)

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

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

如何从SQL Server中的查询中获取列名

使用SQL Server.

我有一个非常广泛的查询,有很多别名等...

有没有办法,只使用SQL(存储过程很好,但不是PHP等),从这个查询中获取所有列名的列表?(我意识到我可能必须将我的查询嵌入到此解决方案中,但这很好.只是一个临时措施.)

谢谢!

sql sql-server alias

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

无法识别 string_agg 内置函数名称 - SQL Server 12.0

我想按某些列按表分组并显示其他列的值。在 SQL v.2017 中我可以使用 string_agg 函数来做到这一点。但我的 SQL 版本是 2012。我该怎么做...

create table dbo.TaskPeriods
(
 [id] [int] NULL,
 [startDate] [datetime] NULL,
 [endDate] [datetime] NULL
 )
 -------------------------------
insert into test.dbo.TaskPeriods values(1,'2018-07-24 00:00:00.000','2018-07-24 10:00:00.000')
insert into test.dbo.TaskPeriods values(2,'2018-07-24 00:00:00.000','2018-07-24 10:00:00.000')
insert into test.dbo.TaskPeriods values(3,'2018-07-24 08:00:00.000','2018-07-24 12:00:00.000')
 --------------------------------------------------------
select id,startDate,endDate from  test.dbo.TaskPeriods
 --------------------------------------------------------
select 
min (startDate)
,max (endDate)
--,string_agg(id,',')  //How to Do this Without string_agg Function
FROM test.dbo.TaskPeriods
group by startDate,endDate
Run Code Online (Sandbox Code Playgroud)

有没有办法将一个特定列与 SQL Server 12.0 中的另一组列连接起来?

sql group-concat sql-server-2012 string-agg

8
推荐指数
0
解决办法
5848
查看次数

SQL Server 2008 - 在变量中选择不同的名称

我需要从SQL Server发送电子邮件到不断变化的名称列表.幸运的是,用户将名称更新为SQL Server表,因此它应始终是最新的.

我已经研究过,希望sp_SQLNotify用来发送电子邮件.(这已经设置并使用实际的名称列表进行测试 - 尚未使用变量).

无论如何,我需要使用要发送的电子邮件地址列表填充变量.

为了做到这一点,我需要相当于:

SELECT DISTINCT [Email_Username] + '@my_email_suffix.com; '
INTO @VARIABLE
FROM My_Table

EXEC sp_SQLNotify @Variable 'My Header' 'My wall of text'
Run Code Online (Sandbox Code Playgroud)

这是可能的,我需要遵循的真正语法是什么?

请原谅我的无知,但我挣扎于一些语法.

谢谢,克雷格.

=====更新答案=====

感谢Aaron.

我使用您的代码作为工作解决方案的基础.

对于将来尝试这样做的人,最终结果是:

-- Declare variable and populate with initial apostrophe
DECLARE @var VARCHAR(MAX) = '''';

-- Populate variable with all unique email user names
SELECT @var += x.email
FROM 
(
  SELECT DISTINCT [Email_Username] + '@my_email_suffix.com;'  AS email
  FROM dbo.[My_Table]
  WHERE [Email_Username] <> ''
) AS x …
Run Code Online (Sandbox Code Playgroud)

sql email variables sql-server-2008

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

T-SQL将行连接成字符串

我正在尝试在select语句中使用子查询来获取字段值,但我似乎无法弄清楚正确的语法.我想提取公司名称列表,并作为该查询的字段,我想选择该公司的所有员工.

关于我做错了什么的任何想法?我得到的错误是

当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式

T-SQL代码:

SELECT 
   company_name, 
   company_type, 
   (SELECT 
        employee_firstname, employee_lastname 
    FROM 
        tblemployees 
    WHERE 
        tblemployees.company_id = tblCompanies.company_id) as employees 
FROM 
    tblCompanies
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Company Name |  Company Type  | Employees
----------------------------------------------------------
Test Co      |  Construction  | Bob Smith, Jack Smith, etc
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

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