我今天在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) 假设我们有一个像这样的简单查询:
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) 我用脚本在我的表上创建了一些约束而没有指定约束名.结果,我最终遇到了限制FK__DOC_OBGS___kntr___54E63309
,例如.
是否可以在不指定确切约束名称的情况下删除约束?
例如,像这样的东西(不起作用)
ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%'
Run Code Online (Sandbox Code Playgroud)
问题是我们有很多数据库与这个表,我需要从表中删除所有约束,但显然每个表的名称是不同的.
我有一个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) 可能重复:将
多行连接成一个文本字符串?
我有一个问题
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)
这怎么可能?
我试图让这个视图查询两个表,然后将每个程序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 Server.
我有一个非常广泛的查询,有很多别名等...
有没有办法,只使用SQL(存储过程很好,但不是PHP等),从这个查询中获取所有列名的列表?(我意识到我可能必须将我的查询嵌入到此解决方案中,但这很好.只是一个临时措施.)
谢谢!
我想按某些列按表分组并显示其他列的值。在 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 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) 我正在尝试在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) sql ×7
sql-server ×7
t-sql ×4
alias ×1
comma ×1
constraints ×1
email ×1
group-concat ×1
nvarchar ×1
string-agg ×1
variables ×1