标签: t-sql

从 Select 语句返回结果并在变量中存储计数

我想执行我的 select 语句,但也将返回的行数存储到一个变量中。这就是我的 DDL 的设置方式,如何将 Select 语句中的行数存储在我的变量中@returnedrows

Declare @returnedrows int;

Insert Into pinkpurplegreen (field1, field2, field3, field4, field5)
Select field1, field2, field3, field4, field5
FROM blue

Select * FROM pinkpurplegreen
Run Code Online (Sandbox Code Playgroud)

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

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

使用 SELECT INTO 和 FULL JOIN 创建第三个表时出现“非唯一列”错误

我正在尝试使用以下代码从两个现有表创建一个新表:

SELECT * INTO CustAndOrders from SalesLT.Customer 
FULL JOIN 
SalesLT.SalesOrderHeader
ON Customer.CustomerID=SalesOrderHeader.CustomerID;
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

Column names in each table must be unique. Column name 'CustomerID' in table 'CustAndOrders' is specified more than once.
Run Code Online (Sandbox Code Playgroud)

我的目的是创建第三个表,其中包含每个连接表中的所有字段。显然“CustomerID”出现了两次,这就是我要加入的。如果我删除 INTO 部分并作为 SELECT 语句执行,它会按预期工作。

sql-server t-sql

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

Sql Where语句动态与案例

我有一个存储过程,我在其中传递了 0、1、2 的值。
0= 无,其中 1= 持续时间 >0 2= 持续时间 =0

select * from Table where case when @duration =1 then Duration else 1 end >0

这有效,但是我无法让其他值起作用。我已经尝试了 3 个 case 语句,但只有最后一个有效。

我怎样才能得到一个动态的 where 语句来处理 3 个值?

sql-server t-sql

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

声明变量用作表名的占位符文本,而不是使用声明表类型

下面是我每月运行的重复代码的示例摘录。每次运行,都会根据月份创建一个新表。例如,创建的表名是YEAR2016..report_Nov2016,但下个月的表名将以_Dec2016. 我想在代码的开头使用一个声明变量,而不是使用 find&replace 来更改所有表名(10 次),这样我只需更改一次表名,它就会在整个代码中得到反映。

declare @table varchar(30)
set @table ='YEAR2016..report_Nov2016'
select  recipient_ID, recipient_Name, recipient_DOB,program_code
into @table 
from YEAR2016..claim_table
Run Code Online (Sandbox Code Playgroud)

分开批次

alter table @table
add Medicaid char(1)
GO
update @table set Medicaid =''
GO 
update @table set Medicaid ='Y' where program_code ='MK A'
Run Code Online (Sandbox Code Playgroud)

据我了解,declare @table table ()应该使用,但这不会实现我的意图,因为需要在数据库中创建一个表。我也知道,使用声明表类型,into @table将无法工作,需要是Insert into @table.

在 TSQL 中是否有可能实现我的设想?

sql-server t-sql

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

sp_send_dbmail 在结果集中的所有字符之间填充 00 位

我在每晚触发的 SQL 代理作业中使用 sp_send_dbmail。该作业查询我们的数据库并检查产品价格更新,如果有,它将通过电子邮件作为附件发送给我们的电子商务供应商。他们有一些自动流程,他们会更新我们的电子商务平台,但是他们的自动流程无法处理 sp_send_dbmail 提供的文件。sp_send_dbmail 似乎在结果集中的所有字符之间放置了空字符。

查看在十六进制编辑器中打开 csv 的结果:

十六进制捕捉

通过文本编辑器查看我看到的预期:

文字捕捉

sp_send_dbmail 在这里查询:

    SET @FileName = 'Update_' + CONVERT(VARCHAR(12),GETDATE),105) '.csv'        
    SET @Query = 'Some Query'

    EXEC msdb.dbo.sp_send_dbmail
        @recipients = 'me@domain.com'
        @query = @Query
        @attach_query_result_as_file = 1
        @query_attachment_filename = @FileName
        @query_result_separator = ','
        @query_result_no_padding =  1
    END
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

****编辑补充说明****

使用 Microsoft SQL Server 2008 R2 排序规则为 Latin1_General_CI_AS

离开 no_padding 会在每个返回的字段中留下几个尾随空格。每个空格 (20) 由​​空值 (00) 分隔

NoPadCapture

sql-server t-sql database-mail encoding unicode

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

T-SQL 替换结果中的 NULL 值

我对此不知所措。实现这一目标的简单方法是什么?

我有这样的“客户”表:

USER_ID| NAME    | J_ID   |K_ID    |Y_ID
-----------------------------------------
    1  |  CUST1  |  A     |  1     |  AB
    2  |  CUST2  |  B     |  2     |  NULL
    3  |  CUST3  |  C     |  3     |  EF
    4  |  CUST4  |  NULL  |  NULL  |  GH
    5  |  CUST5  |  E     |  5     |  IJ
Run Code Online (Sandbox Code Playgroud)

然后像这样的“R_ID”表:

   R_ID  | Y_ID    
------------------
    1A9  |  AB  
    2B8  |  CD  
    3C7  |  EF  
    4D6  |  GH  
    5E5  |  IJ  
Run Code Online (Sandbox Code Playgroud)

然后像这样的“JK_ID”表:

   R_ID  | J_ID | K_ID …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

带双引号的动态 SQL

我正在尝试运行动态 SQL 语句,它适用于任何storename没有撇号的语句。但是,当其中storename包含撇号时,语法不正确,但是在这种情况下我无法使用动态 SQL。

我应该如何修改此语法storename以包含 apastrophe?

这是 DDL

Declare @TestHyphens Table(StoreName varchar(500),topItemSale varchar(500))

Insert Into @TestHyphens (StoreName, topItemSale) Values
('Bob''s Burger''s','Pen'), ('Jacks Coffee Shop','Pencil')
,('Larry''s Hair Shack','Rainbow'), ('Manny''s Sandwich Shop','Sunglasses')

Declare @sql nvarchar(4000), @storename varchar(500)

Declare db_cursor CURSOR FOR
Select StoreName
FROM @TestHyphens

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @storename

While @@FETCH_STATUS = 0
BEGIN

        Set @storename = REPLACE(@storename, '''', '''''''''');

        SET @storename = CHAR(39)+CHAR(39)+@storename+CHAR(39)+CHAR(39);

        SET @SQL = N'Select * from @TestHyphens where …
Run Code Online (Sandbox Code Playgroud)

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

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

获取没有“结束”事件的行

我有一系列代表 start ( S) 或 and ( E) 的行thing

+----+-------+-------+
| Id | Event | Thing |
+----+-------+-------+
|  1 | S     | A     |
|  2 | E     | A     |
|  3 | S     | B     |
|  4 | E     | B     |
|  5 | S     | C     |
|  6 | S     | D     |
|  7 | S     | E     |
+----+-------+-------+
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取没有结束事件的行。

SELECT [a].[Id] AS [ID a],
       [a].[Event] AS [Event …
Run Code Online (Sandbox Code Playgroud)

t-sql

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

行到列 (SQL Server)

我有一个有两列的表,一列是发布类型,另一列是值。

来源表:

+-----+-------+
|Type | Value |
+-----+-------+
|  C  | 381.22|
|  D  | 25.49 |
|  C  | 25.49 |
|  D  | 25.48 |
|  C  | 705.56|
|  D  | 80.00 |
+-----+-------+
Run Code Online (Sandbox Code Playgroud)

我需要创建一个分离类型 C 和 D 的视图,并列出它们的值。

我需要它看起来像这样:

+------+-----+
|Credit|Debit|
+------+-----+
|381.22|25.49|
|25.49 |25.48|
|705.56|80.00|
+------+-----+
Run Code Online (Sandbox Code Playgroud)

我尝试使用 SELECTS 创建两个单独的虚拟列,只是为了列出相应类型的值。

SELECT 
    (SELECT [value] FROM [table] WHERE [type] IN ('D')) AS Debit,
    (SELECT [value] FROM [table] WHERE [type] IN ('C')) AS Credit
Run Code Online (Sandbox Code Playgroud)

发生错误是因为两个 SELECTS 都返回多个结果:

Subquery returned …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

从用户 ID 获取计数

我需要一种方法来获得ek与每个相关联的唯一计数userid

我想要的输出是:

74123    3
Run Code Online (Sandbox Code Playgroud)

但我似乎无法准确获得 Distinct 计数的语法。我只能让它返回 TOTAL 计数,这不是我所追求的。

数据线

    CREATE TABLE [dbo].[___________Purple](
    [userid] [int] NULL,
    [ek] [char](100) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES …
Run Code Online (Sandbox Code Playgroud)

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

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