标签: sql-server

我可以在逻辑上重新排序表中的列吗?

如果我在Microsoft SQL Server中向表中添加列,是否可以在查询中以逻辑方式控制列的显示位置?

我不想搞乱磁盘上列的物理布局,但我希望在可能的情况下逻辑地将列组合在一起,以便SQL Server Management Studio等工具以方便的方式列出表的内容.

我知道我可以通过SQL Management Studio执行此操作,进入表的"设计"模式并拖动列的顺序,但我希望能够在原始SQL中执行此操作,以便我可以执行排序从命令行编写脚本.

sql-server

89
推荐指数
4
解决办法
7万
查看次数

脚本整个数据库SQL-Server

有没有办法从数据库中获取所有表,过程和其他对象的脚本?我知道有一个脚本数据库的选项,但它只给了我某种顶级脚本,当然不是创建所有表,procs,udfs,.etc的脚本.

sql sql-server sql-server-2008

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

varchar(500)比varchar(8000)更有优势吗?

我已经在MSDN论坛和这里读到了这个,我还不清楚.我认为这是正确的:Varchar(max)将存储为文本数据类型,因此存在缺陷.因此,假设您的字段可靠地低于8000个字符.像我的数据库表中的BusinessName字段.实际上,商业名称可能总是在(从我的帽子里拿出一个数字)500个字符.看起来我运行的大量varchar字段远低于8k字符数.

那么我应该将该字段设为varchar(500)而不是varchar(8000)吗?根据我对SQL的理解,这两者之间没有区别.因此,为了简化生活,我想将所有varchar字段定义为varchar(8000).这有什么缺点吗?

相关:varchar列的大小(我不觉得这个回答了我的问题).

sql t-sql sql-server

89
推荐指数
4
解决办法
3万
查看次数

如何在SQL Server中创建实体化视图?

我将设计一个DW,我听说了物化视图.实际上我想创建一个视图,它应该在更改基表时自动更新.任何人都可以用查询示例解释..

sql-server database-design indexed-views

89
推荐指数
4
解决办法
20万
查看次数

通过在不同服务器上的两个数据库中连接两个表来查询数据

在不同服务器上的两个不同数据库中有两个表,我需要加入它们以便进行少量查询.我有什么选择?我该怎么办?

sql database sql-server sql-server-2005 sql-server-2008

89
推荐指数
3
解决办法
27万
查看次数

INNER JOIN条件中的'OR'是个坏主意吗?

在尝试提高极慢查询的速度时(在两个表上只有几万分钟,在SQL Server 2008上只有几万行,如果重要的话),我将问题缩小到OR我的内连接中,如:

SELECT mt.ID, mt.ParentID, ot.MasterID
  FROM dbo.MainTable AS mt
  INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID
                                  OR ot.ID = mt.ParentID
Run Code Online (Sandbox Code Playgroud)

我把它更改为(我希望是)一对等效的左连接,如下所示:

SELECT mt.ID, mt.ParentID,
   CASE WHEN ot1.MasterID IS NOT NULL THEN
      ot1.MasterID ELSE
      ot2.MasterID END AS MasterID
  FROM dbo.MainTable AS mt
  LEFT JOIN dbo.OtherTable AS ot1 ON ot1.ParentID = mt.ID
  LEFT JOIN dbo.OtherTable AS ot2 ON ot2.ID = mt.ParentID
  WHERE ot1.MasterID IS NOT NULL OR ot2.MasterID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

..现在查询运行大约一秒钟!

OR加入条件通常是个坏主意吗?或者我在桌子的布局中不知何故不幸?

sql t-sql sql-server inner-join sql-server-2008

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

TSQL - 如何在BEGIN .. END块中使用GO?

我正在生成一个脚本,用于自动将更改从多个开发数据库迁移到暂存/生产.基本上,它需要一堆更改脚本,并将它们合并到一个脚本中,将每个脚本包装在一个IF whatever BEGIN ... END语句中.

但是,某些脚本需要一个GO语句,以便例如SQL解析器在创建新列后知道它.

ALTER TABLE dbo.EMPLOYEE 
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column:  EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Run Code Online (Sandbox Code Playgroud)

但是,一旦我将其包装在一个IF块中:

IF whatever
BEGIN
    ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
    GO
    UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Run Code Online (Sandbox Code Playgroud)

它失败了,因为我发送了一个BEGIN没有匹配的END.但是,如果我删除GO它,它会再次抱怨一个未知的列.

有没有办法在单个IF块中创建和更新同一列?

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

89
推荐指数
5
解决办法
5万
查看次数

无法开始分布式事务

我正在尝试对链接服务器运行SQL,但我得到了错误.

BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions


OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".

Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
Run Code Online (Sandbox Code Playgroud)

提供程序返回了两个错误:

错误#1:

Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is …
Run Code Online (Sandbox Code Playgroud)

sql-server msdtc sql-server-2005 distributed-transactions

89
推荐指数
3
解决办法
16万
查看次数

无法执行BACKUP LOG,因为没有当前的数据库备份

我尝试恢复数据库,但此消息显示.如何恢复此数据库?

恢复数据库'farhangi_db'失败.
(Microsoft.SqlServer.Management.RelationalEngineTasks)
------------------------------附加信息:

System.Data.SqlClient.SqlError:无法执行BACKUP LOG,因为
没有当前的数据库备份.(Microsoft.SqlServer.SmoExtended)

sql-server

89
推荐指数
4
解决办法
10万
查看次数

使用SqlCommand Async方法时性能很差

使用异步调用时,我遇到了严重的SQL性能问题.我创建了一个小案例来证明这个问题.

我在SQL Server 2016上创建了一个数据库,它驻留在我们的LAN中(因此不是localDB).

在该数据库中,我有一个WorkingCopy包含2列的表:

Id (nvarchar(255, PK))
Value (nvarchar(max))
Run Code Online (Sandbox Code Playgroud)

DDL

CREATE TABLE [dbo].[Workingcopy]
(
    [Id] [nvarchar](255) NOT NULL, 
    [Value] [nvarchar](max) NULL, 

    CONSTRAINT [PK_Workingcopy] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

在该表中,我插入了一条记录(id='PerfUnitTest',Value是一个1.5mb的字符串(一个较大的JSON数据集的zip)).

现在,如果我在SSMS中执行查询:

SELECT [Value] 
FROM [Workingcopy] 
WHERE id = 'perfunittest'
Run Code Online (Sandbox Code Playgroud)

我立即得到结果,我在SQL Servre Profiler中看到执行时间大约是20毫秒.一切正常.

使用plain从.NET(4.6)代码执行查询时SqlConnection:

// at this point, the connection …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server asynchronous async-await

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