小编Ωme*_*Man的帖子

添加日期时间时交叉应用失败

在尝试实现将Pivot两行数据表合并为一行的-ed 目标时,我的第一个想法是使用Cross Apply. 通过使用Cross Apply可以识别/生成具有从行的唯一 id 派生的特定列名的每一行。(例如,“纬度”源列的“纬度1”和“纬度2”)。

当我使用INTorFLOAT数据类型时一切都很好,但是当我尝试使用DateTimeall VALUESbecome 时DateTime


示例运输纬度/经度/日期时间

我们在两个不同的日子报道了船舶旅程中的两点:

CREATE TABLE #Shipping
(
     [RouteID]     [INT]  NOT NULL,
     [Latitude]    FLOAT NOT NULL, 
     [Longitude]   FLOAT NOT NULL,
     [Time]        DATETIME NOT NULL

);

INSERT #Shipping(RouteID, [Latitude], [Longitude], [Time])
VALUES          (1,         18.0221,    -63.1206,  '24-Jan-2016'), 
                (2,         17.8353,    -62.99667, '25-Jan-2016');
Run Code Online (Sandbox Code Playgroud)

成功的交叉应用 如果我们CrossApply对前三列的数据使用

  SELECT  col+cast([RouteID] as varchar(1)) new_col
         , X.value
       FROM #Shipping
  CROSS APPLY
  (
      VALUES
         (RouteID, …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2012 cross-apply

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

ALTER TYPE 不可用 那么如何更改类型?

我知道关于这个问题还有其他问题,但这个问题真的很简单,所以我不是在寻找一个复杂的答案!

所以我有这个脚本:

IF  EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N'IDListTableType' AND ss.name = N'dbo')
DROP TYPE [dbo].[IDListTableType]
GO

IF NOT EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N'IDListTableType' AND ss.name = N'dbo')
CREATE TYPE [dbo].[IDListTableType] AS TABLE(
    [ID] [int] NOT NULL,
    UNIQUE NONCLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
Run Code Online (Sandbox Code Playgroud)

运行它时出现错误,因为它IDListTableType在数据库中的其他地方被引用。因此,我需要一种方法来更改表类型,或者查找并删除并重新创建所有其他引用IDListTableType. 有没有一种简单的方法可以做到这一点?

sql-server user-defined-table-type

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

列 生成用于按位比较的标志值

我们正在创建一个新应用程序,其中使用各种表来保存枚举。由于这些表中的 ID 将用于按位比较,我们希望确保插入的新行将自动使用与“设置”的下一位相对应的十进制数。

例如,如果我们有一个闹钟应用程序,我们可能会包含一个“工作日”表,可以按以下方式使用:

CREATE TABLE dbo.Weekdays
(
    WeekdayID INT NOT NULL 
        CONSTRAINT PK_Weekdays PRIMARY KEY CLUSTERED
    , WeekdayName VARCHAR(20)
);

INSERT INTO dbo.Weekdays
VALUES (1, 'Sunday')
    , (2, 'Monday')
    , (4, 'Tuesday')
    , (8, 'Wednesday')
    , (16, 'Thursday')
    , (32, 'Friday')
    , (64, 'Saturday');

CREATE TABLE dbo.AlarmsDefined
(
    AlarmID INT NOT NULL
        CONSTRAINT PK_AlarmsDefined PRIMARY KEY CLUSTERED
    , Weekdays INT NOT NULL
);

INSERT INTO dbo.AlarmsDefined (AlarmID, Weekdays)
VALUES (1, 50);

SELECT W.WeekdayName
FROM dbo.AlarmsDefined AD
    INNER JOIN dbo.Weekdays …
Run Code Online (Sandbox Code Playgroud)

sql-server bitwise-comparison

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

执行从选择生成的动态 SQL

SQL 中的一个业务流程可以为每个操作生成一个变量1-N 次调用存储过程,其目的是插入与主流程相关的数据。

如何从选择执行多行生成的 sql 或者有没有办法从选择调用存储过程?


这一步之前的过程是涉及到业务逻辑和数据驱动的操作,对相关的FK连接表做了后续的插入。

在需要调用存储过程的那一点上,它已经准备好在表变量中处理数据。调用存储过程的步骤(过程中的逻辑)是一个涉及过程,在存储过程中是有意义的,并且不能复制到现有过程中。


Select.

SELECT 'EXEC [sim].[ROI_Save] ' + CONVERT(varchar(6), VSL.PathId)           + ', '
                                + Convert(varchar(6), @ROIResultId)         + ', '
                                + CONVERT(varchar(6), RT.routeTypeResultId) + ', '
                                + CONVERT(varchar(6), RT.ROI_RouteTypeId)   + '; '
FROM  @routeResultIds RT
JOIN sim.ROI_Result_Vehicle VSL ON RT.ROI_Result_VehicleId = VSL.ROI_Result_VehicleId 
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明

是否连接结果并调用Exec

sql-server dynamic-sql t-sql sql-server-2012

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

授予所有存储过程的视图定义

授予用户查看所有模式中的所有存储过程的能力的方法是什么?


命令如

GRANT VIEW DEFINITION ON [dbo].[{SprocNameHere}] TO [{UserNameHere}] 
Run Code Online (Sandbox Code Playgroud)

是一种一招小马,必须对所有存储过程进行操作。有没有更通用的方法来包含所有内容?

sql-server azure-sql-database

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

基于其他位列的计算列位

从其他位列计算位列的公式是什么?

例如:

CREATE TABLE #Employee
(
[empNumb]       [INT] identity(1,1) PRIMARY KEY,
[IsOk]          [BIT] NOT NULL, -- This is computed from other three columns.
[HasValidHours] [BIT] NOT NULL,
[NoDemerits]    [BIT] NOT NULL,
[NoAccidents]   [BIT] NOT NULL
);

ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_HasValidHours]  
  DEFAULT ((0)) FOR [HasValidHours];
ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_NoDemerits]  
  DEFAULT ((0)) FOR [NoDemerits];
ALTER TABLE #Employee ADD CONSTRAINT [DF_Employee_NoAccidents]  
  DEFAULT ((0)) FOR [NoAccidents];
Run Code Online (Sandbox Code Playgroud)

IsOk将根据,和的-ing计算。HasValidHoursNoDemeritsNoAccidents

sql-server sql-server-2012 table

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

带有可选参数的存储过程限制返回的行(如果指定)

如何拥有一个允许消费者有选择地指定返回行数的存储过程?

如果未指定行数,则返回所有行。

sql-server stored-procedures azure-sql-database top

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