标签: sql-server-2012

执行从选择生成的动态 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
查看次数

字符串函数左1000,但只到最后一个句点或回车

我有文本块,长度在 500 到 2000 个字符之间。

我需要能够做的是从描述中最多提取 1000 个字符,但仅限于最后一个句号或回车符(Char(13)),这样文本就不会在句子中间被截断。如果同时有句号和 Char(13),我希望它在句号处关闭。

我正在粘贴一些随机生成的文本以尝试显示我的意思。

*打开包装友好欣喜若狂所以可能幽默。充足的结束可能会愚蠢地安静一组说她。我们不是前谷的保证。四需要现场咋说我们找哩。被命令他确信达斯伍德确实没收了。害羞庆祝她合理但遇到的情绪。建议其处理好婚前社交。图纸导致最大的添加主题努力同性恋记住。原则一但您遇到的帮助是不可能的。谁到达结束如何肥沃启用。哥哥她加了还见分毫自然的微笑条画。自己在出动兴趣昏迷不觉兴旺吧。她喧闹的用她不一样的友情表达。性生活迅速兴起。先生的事情做很多其他虚荣自己等待。总是教区品味,就像父亲先生用餐一样。

或者在主要地址中什么都不是。其使直人高度依赖。火腿窗十六问命问。是在唱喜欢必须显示。真男孩法县她无法她的妹妹。像六点一样让你离开。其中性是现在建立的休假法。在快速脸红的内置表中。功过就怕或热情落后。在任何这样的春天希望。忧郁的方式留言*

我希望能够将所有文本返回到“主要地址”。(990 个字符)。

sql-server sql-server-2012

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

has_unchecked_assembly_data 的重要性由于更改兼容性级别后的持久计算列?

这个数据库有一个持久化的计算列,它是通过调用一个 .NET 函数来计算的。在将兼容性从 MSSQL 2005 更改为 2012 时,出现错误 10334,这看起来更像是警告:它告诉我必须将其中一个表标记为 has_unchecked_assembly_data。

它没有告诉我该怎么做。我应该保持原样吗?我应该以某种方式强制重新计算列吗?如何?

在此处输入图片说明

alter assembly unchecked data 的文档列出了造成这种情况的几个原因,我认为 #1 是唯一适用于该数据库的原因。它也没有解释如何取消标记这些列。

sql-server sql-server-2012 sql-clr

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

强制Sql server在合并连接中使用索引查找

我正在测试 sql server 中的合并加入。我有一个INNER JOIN并强制优化器执行以下操作MERGE JOIN

  • ID 在个人表中是主键
  • ID 在 Abteilung 表是主键
  • 这些表中没有其他索引

     select * from  [dbo].[Personal] as P inner join [dbo].[Abteilung] as A  
     on  P.[ID]= A.[Personal_ID]   OPTION (MERGE JOIN) 
    
    Run Code Online (Sandbox Code Playgroud)

然后优化器使用这个计划来运行我的查询:

在此处输入图片说明

我想强制优化器使用index seek而不是Table Scan

我为实现这个目标做了什么:

  • 在 Table Abteilung 中的列ID,上定义分组索引Personal_ID。如果我运行查询,执行计划是这样的变化:

在此处输入图片说明

这里我有聚集索引扫描,但没有聚集索引搜索

  • 使用FORCESEEK提示。如果我使用此提示,运行查询会发生错误:

由于此查询中定义的提示,查询处理器无法生成查询计划。在不指定任何提示且不使用 SET FORCEPLAN 的情况下重新提交查询。

  • 如果我在查询中添加 where 子句,则查询将更改为:

      select * from  [dbo].[Personal] as P inner join [dbo].[Abteilung] as A  
      on P.[ID]= A.[Personal_ID] where A.[Personal_ID]=2 
      OPTION (MERGE    JOIN) …
    Run Code Online (Sandbox Code Playgroud)

sql-server optimization execution-plan sql-server-2012

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

如何将数据库列表传递给 sp_MSforeachdb?

我有以下脚本,运行时给我一个逗号分隔的数据库名称列表。

        SET NOCOUNT ON
        declare @db_list NVARCHAR(MAX)
        DECLARE @command varchar(1000)

        SELECT @COMMAND = 'SELECT DB_NAME()'

         SELECT @db_list  = STUFF((
                                    SELECT ', ' + name FROM sys.databases
                                    WHERE name like '__Order'
                                    FOR XML PATH(''), 
                                    TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')

         -- in case there are no DBs to show, then show no DB '***'
         select @db_list = COALESCE(@db_list,'***') 

         SELECT @db_list = RTRIM(LTRIM(REPLACE(@DB_LIST,',', ',''')))  


         select @db_list 
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

UKOrder,' ATOrder,' AUOrder
Run Code Online (Sandbox Code Playgroud)

1)这给出了错误的结果集,我希望它是

'UKOrder','ATOrder','AUOrder'
Run Code Online (Sandbox Code Playgroud)

2) 如何将@db_list 传递给 sp_MSforeachdb?

假设我想跑

选择 db_name()

在@db_list 中的每个数据库中

英国订单

订单 …

sql-server dynamic-sql sql-server-2008-r2 sql-server-2012 sql-server-2014

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

Logshipping 中的登录问题

我已在主服务器 A 和辅助服务器 B 中配置了日志传送。

一切正常,直到我使备用数据库联机。

用户无法登录辅助 serverB 数据库(位于已联机的辅助服务器上)

谁可以帮我这个事?

sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012

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

错误 35338:不支持聚集列存储索引

在SQL Server 2012中,我想指数有一个表列存储索引。但是出现错误消息:

消息 35338,级别 16,状态 1,第 1 行
不支持聚集列存储索引。

我的代码是:

CREATE TABLE [dbo].[Card](
    [CardId] [int] IDENTITY(1,1) NOT NULL,
    [CardSerialNumber] [varchar](19) NULL,
    [CreateDate] [datetime] NOT NULL
) ON [PRIMARY]

GO
CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON [dbo].[Card]
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 columnstore

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

热心作家的作用是什么?

  1. 热心作家的作用是什么?这个过程如何在 SQL Server 内部工作?
  2. 急切的作家和懒惰的作家/检查点之间的主要区别是什么?我的理解是,急切和懒惰的作者都在做同样的工作——将脏页硬化到磁盘。我的理解是正确的还是我在这里遗漏了什么?
  3. 我在一些博客上读到,“在批量记录恢复模型中没有机会进行前滚操作,因为交易记录最少”。如果我们以日志备份由最少记录的事务组成的情况为例,如果没有任何前滚操作,这个日志恢复怎么可能成功?

我真的对上面的问题感到困惑。请帮助我更多地了解热心作家。

谢谢你。

sql-server-2012 transaction-log recovery-model

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

为什么我可以查询超过 1024 列,但无法查看同一个查询?

我的老板正在请求一个大于 1024 列的视图,其中他在查询视图时只会选择他想要的几列,以便实际返回的列小于 1024。为什么我可以查询大于 1024 的列,但是我无法将这个完全相同的查询保存为视图?

我正在使用 SQL Server 2012 企业版

sql-server view sql-server-2012

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

Trying to drop database only if it does not exist by using the db_id function fails

When the database foo is not yet created and I I run this

IF db_id(N'foo') IS NOT NULL
BEGIN
  ALTER DATABASE [foo] SET OFFLINE
  GO

  DROP DATABASE [foo]
  GO
END
Run Code Online (Sandbox Code Playgroud)

I get a message

Cannot drop the database 'foo' becuase it does not exist or you do not have permission.

Why?

I have confirmed that the sql statement select db_id(N'foo') returns NULL.

sql-server t-sql sql-server-2012

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