标签: sql-server-2012

如何识别sql中的unicode文本?

Table1有一个名为umsg的nvarchar列,它包含unicode文本,也有一些时间也是英文.

我想找出umsg专栏中的英文文本.

select * 
from table1 
where 
    RDate >='01/01/2014' and RDate < '09/26/2017' 
    and umsg = convert(varchar(max), umsg)
Run Code Online (Sandbox Code Playgroud)

我使用上面的查询,在区域语言中工作正常,但有些时候失败.假设col包含'refnoété'这样的文本我认为上面的消息是unicode,如果我使用上面的查询,它/ sql显示我是英文而不是unicode.如何处理这个.

Table :
Id  Date                      Umsg
1   2017-09-12 00:00:00.000   The livers detoxification processes.
2   2017-09-11 00:00:00.000   Purposely added 1 
3   2017-09-10 00:00:00.000   ??????? ?? ????-???? ????? ?? ?? ???? ?? ???????? ??                       ????? ?? ??? ????
4   2017-09-17 00:00:00.000    ???? ?? ?????? ?????? ??? ???? ??? ??? ??? ???? ??                                     ????? ?? ??? ???? ?
5   2017-09-17 00:00:00.000    ref no été …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2012

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

tsql sql具有相同名称的多个临时表

我正在使用RDL文件和存储过程来制作报告。RDL文件名是test.rdl,我有四个(4)存储过程连接到此test.rdl文件。因此该文件将具有四个数据集。

报告文件名:

test.rdl

存储过程名称:

  • sp_test_1
  • sp_test_2
  • sp_test_3
  • sp_test_4

这些存储过程中的每一个都有具有相同名称(#temp)的临时表。

create table #temp(
ID int,
Name varchar(max),
Location varchar(max)
)

insert into #temp

select * from anothertable where date between '20171001' and '20171031'
Run Code Online (Sandbox Code Playgroud)

一些额外的查询以获得所需的结果,然后最终删除临时表。

select . . . . . . . . . .

drop table #temp
Run Code Online (Sandbox Code Playgroud)

因此,这四个存储过程都具有使用一个名称(#temp)的临时表。

所以我的问题是,当运行RDL测试文件并且一次调用所有四个(4)存储过程时,此方法是否可以正常工作?我关心的是#temp表,所有四个存储过程在运行结束时都有drop table #temp。这会否在运行时影响临时表的填充,因为其中一个存储过程可能在另一个表正在运行时以drop table完成,从而导致查询取消或结果不完整?

能不能请解释一下。我希望这是一个有效的问题。

t-sql sql-server stored-procedures reporting-services sql-server-2012

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

将X个非空列作为单个字符串

我试图找到SQL命令做某事但我不知道如何解释它所以我将使用一个例子.我有一张像这样的桌子:

| one | two | three | four | 
|-----|-----|-------|------| 
| a   | h   | i     | j    | 
| b   | k   | l     |      | 
| c   | m   | n     | o    | 
| d   | p   |       |      | 
| e   | q   |       |      | 
| f   | r   | s     |      | 
| g   | t   |       |      | 
Run Code Online (Sandbox Code Playgroud)

我需要创建新的列,从右侧获取第一个非空列,并将其反向上升并加入/连接字段.

| one | 1-up | 2-up | 3-up    | 
|-----|------|------|---------| 
| a   | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2012

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

检查日期范围之间的任何日期是否在特定年份内

我在这个问题上绞尽脑汁.我有一系列广告系列及其相关的开始和结束日期.我正在尝试编写一个查询来列出2017年开始日期和结束日期之间至少有一天的广告系列.我原来的想法只是使用datepart():

datepart(yyyy,StartDt = 2017) OR datepart(yyyy,EndDt = 2017)
Run Code Online (Sandbox Code Playgroud)

但是,它不会接受2017年之前开始并在2017年之后结束的广告系列,例如开始日期2016年1月1日和结束日期1/1/2018.

sql t-sql sql-server-2012

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

为什么Over()不能在列的总和上工作?

我试图获得TotalPrice的总和,但抛出一个错误:

'Invoices.ServicePrice'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

ALTER PROCEDURE [dbo].[SalesReport] 

        @FromDate date= '11-May-2018',
        @ToDate date= '05-Jun-2018'

AS
BEGIN
        Set @ToDate= case when @ToDate IS NULL then Convert(varchar(11), getdate(), 106) else @ToDate end

        Select ROW_NUMBER() over (partition by b.BookingID order by b.BookingID) as ID, inv.InvoiceNo, 
        convert(varchar(11),inv.EntryDateTime,106) as EntryDateTime, Count(s.ServiceID) as TotalServices,
        SUM(inv.ServicePrice) as TotalPrice, SUM(inv.ServicePrice) over() as TotalRevenue
        from Invoices inv
        Inner Join Bookings b
        ON b.BookingID= inv.fk_BookingID
        Inner Join ZahidCarWashDB.dbo.Services s
        ON s.ServiceID= inv.fk_ServiceID
        where Convert(varchar(11), inv.EntryDateTime, 106) between @FromDate and @ToDate
        group …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures sql-server-2012

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

SQL Server 2012存储过程:具有数字命名列的Where子句

我有一个表,其中一些列名为number

Table1 (id, 2014, 2015, 2016)
Run Code Online (Sandbox Code Playgroud)

当我尝试访问where存储过程中的子句中的这些列时,我收到错误

'.2014'附近的语法不正确.

这是存储过程的代码:

select @SiteNumOfItems = COUNT(*)    
from form.ItemStore I
where I.id = @id and I.2014 = 'Item1'
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

sql sql-server stored-procedures sql-server-2012

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

将日期转换为varchar然后比较

我有一个日期时间列的表信息begindate.

我尝试了以下2个SQL语句:

select * 
from info 
where begindate > '06/30/2018'

select * 
from info 
where convert(varchar, begindate, 101) > '06/30/2018'
Run Code Online (Sandbox Code Playgroud)

第一个查询结果是正确的,但第二个查询结果错误地包括那些迟于'06/30/2017'的结果.

谁能告诉我这是什么原因?有关于它的在线资源吗?谢谢

sql sql-server sql-server-2012

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

SQL Server无需排序即可添加行号

我有一个海量数据文件(制表符分隔).我正在经历数据转换 - 在某些时候,日期字段将填充非日期值(来自描述字段的单词左侧).你可以想象,我不能只是滚动文本文件,或者把它放到excel中去挖掘 - 我需要知道在哪里看.

我正在尝试向导入的表添加行号,以便我可以识别发生数据移位的行.所以,我想知道是否有办法插入行号而不必按任何顺序排序(即基本上编号原始数据文件的行).

运用

ROW_Number()OVER(ORDER BY(___))

我不确定如何完成我正在尝试做的事情,因为我无法订购任何东西 - 它需要完全按照导入进行编号.

sql t-sql sql-server row-number sql-server-2012

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

SQL Server - 选择每个月的每日值

我在SQL服务器中有一个表如下所示:

Machine        Time                  Parts

  A            2018-12-11 00:00      12
  A            2018-12-11 01:00      38
  A            2018-12-11 02:00      52
                    .....
  A            2018-12-11 23:00      13
  A            2018-12-12 00:00      45
  A            2018-12-12 01:00      35
                    .....
  A            2019-01-10 22:00      25
  A            2019-01-10 23:00      68
  A            2019-01-11 00:00      29
  A            2019-01-11 01:00      36
  A            2019-01-11 02:00      19
  A            2019-01-11 03:00      52
                    .....
Run Code Online (Sandbox Code Playgroud)

机器生产的零件数量每小时存储在表格中.我需要的是一个查询,它在2018年12月11日00:00到2019年1月11日00:00之间获取所有数据,计算每天的部分总和并返回所有31个总和值.

我一直试图解决这个问题几天但由于我的SQL技能仍然很弱,因此无法解决这个问题.任何帮助,将不胜感激.

sql sql-server sql-server-2012

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

无法更新时间戳列

我建议使用以下存储过程来审核登录表.

 CREATE PROCEDURE ApplicationLogin 
     @Username NVARCHAR(255), 
     @IpAddress NVARCHAR(255)
 AS
 BEGIN
     DECLARE @UserID INT;

     BEGIN TRANSACTION;  

     SET @UserID = (SELECT UserID FROM User WHERE Username = @Username);

     IF @UserID > 0
     BEGIN
         UPDATE User 
         SET LastLogin = GETDATE() 
         WHERE UserID = @UserID;
     END

    INSERT INTO UserLogger (Username, UserID, TimeStamp)
    VALUES (@Username, @UserID, @Timestamp);

    COMMIT TRANSACTION;

    SELECT @UserID    
END
Run Code Online (Sandbox Code Playgroud)

但是我无法让它解决一些我无法弄清楚的语法错误.

User表如下所示:

CREATE TABLE [dbo].[User]
(
    [UserID] [INT] IDENTITY(1,1) NOT NULL,
    [UserName] [VARCHAR](50) NOT NULL,
    [Enabled] [BIT] NOT NULL,
    [LastLogin] [TIMESTAMP] …
Run Code Online (Sandbox Code Playgroud)

sql stored-procedures syntax-error sql-server-2012

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