标签: t-sql

使用 Echo 语句在文本文件中写入 Echo is ON

以下代码用于在文本文件中写入数字,而是将“Echo is ON”写入文本文件。

SET @CMD = 'ECHO '+@Ver+'>'+@Vercheck      
  Print @CMD

EXEC xp_cmdshell @CMD  
  ,NO_OUTPUT 
Run Code Online (Sandbox Code Playgroud)

打印@CMD 给出“ECHO 1>C:\Pharmsuite\Vercheck.txt”

这里查询写的是“Echo is ON”而不是 1。

sql-server-2008 sql-server t-sql xp-cmdshell

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

估计行数 > 实际行数是一个需要担心的问题吗?

我有一个表格[order],其中一个简单的选择以一种奇怪的方式显示了估计行数和实际行数之间的主要差异。

在这种情况下,一般估计行数与实际行数相比偏斜,这完全具有讽刺意味。此外,“执行次数”为 1。

在此处输入图片说明

询问 :

SELECT 
ord.paymentmode AS [HowTheyPaid],
ord.id AS [OrderId],
ord.ISBackEndSystemMigrated,
ord.ISDuplicate,
ord.ISMerged
FROM 

DedicatedDentalPlans_Stage.dbo.[order] ord
WHERE 
ISBackEndSystemMigrated=0 
AND ISDuplicate = 1
Run Code Online (Sandbox Code Playgroud)

桌子

USE [DedicatedDentalPlans_Stage]
GO

IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_Order_ISBackEnd]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[Order] DROP CONSTRAINT [DF_Order_ISBackEnd]
END

GO

IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF__Order__ISDuplica__382F5661]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[Order] DROP CONSTRAINT [DF__Order__ISDuplica__382F5661]
END

GO

IF  EXISTS (SELECT * …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server t-sql execution-plan

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

如果在select语句中不为空,如何替换列?

我有一个联系人(ID、名字、姓氏、中间名)。

例如:

| ID | FirstName | LastName | MiddleName |
|====|===========|==========|============|
| 1  | Mark      |Jordan    | E          |
|----|-----------|----------|------------|
| 2  | James     | Blunt    | NULL       | 
|----|-----------|----------|------------|
Run Code Online (Sandbox Code Playgroud)

我要输出

Mark E. Jordan
James Blunt
Run Code Online (Sandbox Code Playgroud)

因此,如果 MiddleName 不为空,则添加一个 '.' 之后,否则输出空值。

我知道isnull函数,但是我需要的是isnotnull函数。如何完成查询?

到目前为止我的查询:

select FirstName + ' ' + isnull(...)  + LastName
from Contact
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql functions

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

在服务器的所有实例上备份所有数据库的 TSQL 解决方案?

我很确定我想要的当前实现是不可能的,sys.databases 目录视图在服务级别范围内可以了解其他 SQL Server 实例 (lol)。但我认为很多事情用电脑是不可能的,所以希望我能用不同的方式解决我的问题。

我已经创建了一个 PowerShell 解决方案,该解决方案使用 SMO 来备份所有实例上的所有数据库,但是由于安全原因,我无法在不将运行代理作业的代理帐户设为本地管理员的情况下使该解决方案工作服务器。

作为替代方案,我编写了一个 T-SQL 脚本,该脚本将作为代理作业运行,并每 15 分钟对 SQL Server 实例中的所有数据库进行完整、差异或事务备份。

    DECLARE @sql nvarchar(MAX) = N'';

--Check time for full backup
IF (DATENAME(weekday,getdate()) = 'Sunday' AND convert(time,getdate()) > '00:00' and convert(time,getdate()) < '00:15')
    BEGIN
        SELECT @sql += 'BACKUP DATABASE ' + QUOTENAME(name) 
                    + ' TO DISK = N''C:\backups\' + @@ServiceName  + '_' + name + '__' 
                    + cast(year(getdate()) as nvarchar(4)) + '_' + cast(month(getdate()) as nvarchar(2)) + '_' + cast(day(getdate()) as nvarchar(2)) …
Run Code Online (Sandbox Code Playgroud)

sql-server backup instance t-sql smo

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

检查触发器是否被 INSERT 或 DELETE 触发

我知道这是您可以在本网站上找到的最简单的问题,但我无法在互联网上找到答案。

如何检查触发器是否由INSERT或触发DELETE

例子

CREATE TRIGGER [dbo].[TestTrigger]
On [dbo].[Table1]
AFTER INSERT, DELETE
AS
    --if save
    --do some work

    --else if delete
    --do some work other work
Run Code Online (Sandbox Code Playgroud)

如果是insert,我想做一些工作,如果是delete ,我想做一些其他工作。

请提供相同的代码片段。

trigger sql-server insert t-sql sql-server-2008-r2

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

T-SQL中的动态长度混淆方法

我想从 SQL Server 数据库中混淆(打乱)敏感数据,但方式将提供:

  • 不可逆性(明文无法从混淆数据中导出),
  • 混淆后的数据长度需要与混淆前的数据长度相同。
  • 对于相同输入值的重复混淆,混淆值不需要是唯一的。老实说,我更喜欢为可以使用的相同输入获得相同的值(例如,不同表中的一些匹配数据,可能在测试用例中有用)。

例子:

Abc -> zyx (lenght: 3)
StackOverflow -> a65vr4doqjd (lenght: 11)
Run Code Online (Sandbox Code Playgroud)

通常我会避免“自制”算法,所以你知道一些可以提供这种混淆的 MS 内置解决方案吗?

我希望我清楚地表达了我的问题,否则让我知道,我会尝试根据需要添加尽可能多的信息。

security sql-server t-sql data-masking

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

组合(连接)没有键的表

我有表 B 和表 A。表 B 包含我需要提取的日期记录。但是,我只想在以下情况下拉动它们:

  • 它们在表 A 中根本不存在
  • 它们存在于表 A 中,但仅当表 A.status = 0 时

诀窍是我没有钥匙可以加入表格。所以,我使用 Item 列和 date 列来加入。(注意两个项目可以有相同的日期。也可以有多个相同的项目,但日期也不同。)

所以表 B 可能有:

    [Item]      [Qty]   [Date]
    F-001100,   400      7/14/2016
    F-002200,   750      7/28/2016
    F-000767,   1000     7/28/2016
    F-006006,   300      8/01/2016
    F-002200,   900      7/30/2016
Run Code Online (Sandbox Code Playgroud)

表A可能有:

[Item]    [Status]  [Qty]    [Date0]     [Date2]     [Date3]     [Date4]
F-001100, 1,        400      7/14/2016   7/15/2016   7/16/2016   7/17/2016
F-002200, 0,        750      7/28/2016   7/29/2016   7/30/2016   7/31/2016
Run Code Online (Sandbox Code Playgroud)

所以结果集应该是:

[Item]       [Qty]     [Date]
F-002200,    750       7/28/2016
F-000767,    1000      7/28/2016
F-006006,    300       8/01/2016
F-002200,    900       7/30/2016 …
Run Code Online (Sandbox Code Playgroud)

t-sql

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

将空字符串转换为空日期时间

考虑 Microsoft SQL Server 2012 中的以下代码:

INSERT INTO [dbo].Production
SELECT [field1]
      ,[field2]
      ,cast([datefield] as datetime)
FROM [RAW].Staging
Run Code Online (Sandbox Code Playgroud)

临时表加载了来自 CSV 文件的数据。因此,在某些情况下,我们最终会得到空字段,而不是 NULL 字段。因此,日期字段在插入生产表时会转换为 1900-01-01 日期。

我想知道在上面的插入代码中是否有什么我可以做的,以确保当来自临时表的字段为 NULL 或为空时,日期字段设置为 NULL。

null sql-server t-sql cast datetime

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

将 varchar 转换为 int,将 0 以下的任何值转换为 0

我将值从 SQL Azure 中的临时表插入到生产表中。临时表中的值是 varchar,而生产表中的目标值是 tinyint(它是人类的年龄字段,所以我认为最多 255 就足够了;))

问题是由于源系统中的错误,我们倾向于将一些值设为 -1 或 -2,而它们应该是 0。这会导致问题,因为 TINYINT 仅支持 0 到 255 的值(也因为这实际上是错误的)。我想知道是否有某种 case 语句可以用来将值转换为 0,如果它们低于 0,或者如果它们落在 0-255 范围之外?

sql-server t-sql cast

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

合并两个表

SQL Server 2008 R2我有一个名为的主表Employees,其中包含大约 20 个字段。我有第二个电子表格,其中包含除 5 之外的所有字段UpdateToEmployees,我需要合并这些字段,Employees但仅在值不相同的地方。

执行此操作的最有效方法是什么?我的思考过程(可能很长)是:

  1. 运行 ASelect语句以获取值不相同的行
  2. 获取该结果集并插入到临时表中exists,用是/否值标记一个字段
  3. 如果该字段exists包含 yes 值 - 运行更新查询
  4. 如果该字段不exists包含值 - 运行插入查询

使用下面的 DDL - 我如何加入 empID 并更新记录 where when matched= Yes 或 True(无论它返回的是什么)并插入当前不存在的记录Employees

Create Table Employees
(
  empid varchar(50)
  ,empaddress varchar(500)
  ,phone varchar(12)
  ,emcontact1 varchar(500)
  ,emcontact2 varchar(500)
  ,active varchar(10)
  ,manager varchar(50)
  ,paygrade int
)

Insert Into Employees (empid,empaddress,phone,emcontact1, emcontact2, active, manager, paygrade) VALUES …
Run Code Online (Sandbox Code Playgroud)

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

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