我想执行我的 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) 我正在尝试使用以下代码从两个现有表创建一个新表:
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 语句执行,它会按预期工作。
我有一个存储过程,我在其中传递了 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 个值?
下面是我每月运行的重复代码的示例摘录。每次运行,都会根据月份创建一个新表。例如,创建的表名是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 代理作业中使用 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) 分隔
我对此不知所措。实现这一目标的简单方法是什么?
我有这样的“客户”表:
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 语句,它适用于任何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) 我有一系列代表 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) 我有一个有两列的表,一列是发布类型,另一列是值。
来源表:
+-----+-------+
|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) 我需要一种方法来获得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)