我可以通过SQLcmd传递连接字符串吗?
我想在使用sqlcmd时通过连接字符串更改应用程序名称和故障转移伙伴(用于镜像).
现在.当我使用sqlcmd时,SQLcmd在sys.sysprocesses结果中设置我的连接的应用程序名称.
sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012 sql-server-2014
我有一个存储过程创建临时表.它只需要这个存储过程的范围,而不是其他地方.
当我使用临时表列出这个时,我总是检查临时表是否存在,如果存在则删除它,然后在存储过程中创建它.即:
IF OBJECT_ID('tempdb..#task_role_order') IS NOT NULL
DROP TABLE #task_role_order
CREATE TABLE #task_role_order(...)
Run Code Online (Sandbox Code Playgroud)
大多数情况下,除了在创建临时表之前,最好先删除临时表吗?
如果需要更多上下文,我有一个.NET Web API后端,它调用数据库中的存储过程.我相信当SQL Server会话结束时,SQL Server会丢弃临时表.但我不知道.NET每次查询数据库时是打开一个新的SQL Server会话,还是每个应用程序生命周期只打开一次,等等.
我读过这个类似的问题,但认为它略有不同.
我有一个表,消息在发生时存储.通常有一条消息'A',有时A被单个消息'B'分隔.现在我想对值进行分组,以便我能够分析它们,例如找到最长的'A'条纹或'A'条纹的分布.
我已经尝试过COUNT-OVER查询,但是仍在为每条消息计算.
SELECT message, COUNT(*) OVER (ORDER BY Timestamp RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
Run Code Online (Sandbox Code Playgroud)
这是我的示例数据:
Timestamp Message
20150329 00:00 A
20150329 00:01 A
20150329 00:02 B
20150329 00:03 A
20150329 00:04 A
20150329 00:05 A
20150329 00:06 B
Run Code Online (Sandbox Code Playgroud)
我想要跟随输出
Message COUNT
A 2
B 1
A 3
B 1
Run Code Online (Sandbox Code Playgroud) 我的表中有一栏.我们在其中以格式存储字符串值.在'HH:MM'使用此表获取记录时,每个东西都可以正常工作
DATEDIFF(MINUTE, '00:00', ColumnName)
Run Code Online (Sandbox Code Playgroud)
问题是我们的价值大于23:59.它的显示错误就像
从字符串转换日期和/或时间时转换失败.
任何人都可以建议我采用正确的方法来实现这种情况.
我有一个存储过程,其中没有标题注释.我想添加它们,但每当我尝试时,它都不包括在内.
在SQL Server Management Studio I中:
1.右键单击我的存储过程,然后单击"修改"
USE [ABigDB]
GO
/****** Object: StoredProcedure [dbo].[spDoWork] Script Date: 21/08/2015 14:11:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spDoWork]
@Id uniqueidentifier,
@Session nvarchar(50),
@XMLData xml
WITH EXECUTE AS OWNER
AS
BEGIN
--etc etc...
END
Run Code Online (Sandbox Code Playgroud)
2.我将注释粘贴到存储过程上方并运行脚本:
-- Stored Procedure
-- Author: Dave
-- Create date: 21/08/2015
-- Description: Does Stuff
-- Change history
-- 07/08/2015 - Overlord - Done stuff
-- 06/08/2015 - Kerrigan - Done more stuff
USE [ABigDB] …Run Code Online (Sandbox Code Playgroud) 我有一个asp.net mvc 5 web api应用程序,我需要将SqlGeography实例转换为DbGeography实例,以便使用Entity Framework 6进行查询.我使用以下代码执行此操作:
SqlGeography geo = SqlGeography.STGeomFromText(chars, Constants.SRID);
DbGeography dbGeo = DbSpatialServices.Default.GeographyFromProviderValue(geo);
Run Code Online (Sandbox Code Playgroud)
调用GeographyFromProviderValue抛出以下异常:
指定的提供程序值与此空间服务实现不兼容.类型为'Microsoft.SqlServer.Types.SqlGeography,Microsoft.SqlServer.Types,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91'的值.
参数名称:providerValue
果然,我的SqlGeography实例来自SQL Server 2014类型程序集(Microsoft.SqlServer.Types, Version 12.0.0.0).
深入了解Entity Framework源代码显示此方法是罪魁祸首:
//EntityFramework.SqlServer.dll(6.0.0.0) System.Data.Entity.SqlServer.SqlTypesAssemblyLoader
public SqlTypesAssemblyLoader(IEnumerable<string> assemblyNames = null)
{
this._preferredSqlTypesAssemblies = (assemblyNames ?? ((IEnumerable<string>)new string[]
{
"Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91",
"Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
}));
this._latestVersion = new Lazy<SqlTypesAssembly>(new Func<SqlTypesAssembly>(this.BindToLatest), true);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,不包括SQL Server 2014的类型程序集.这是否意味着Entity Framework 6不支持SQL Server …
我有一个存储过程,它从多个表中检索三列.我想在用户定义的多值表中获取结果,并将变量传递给另一个过程以对变量数据执行操作.但它不起作用.我有以下代码.知道为什么它不起作用吗?
--This is the initial stored procedure
Create Procedure spSelectData
AS
BEGIN
Select
Userid, first_date, last_update
From Users
END
--This is to create the table type.
Create type Task1TableType AS TABLE
(
Userid nvarchar(20),
First_date datetime,
Last_update datetime
)
--Declare a table of type
DECLARE @firstStep AS Task1TableType
(
Userid nvarchar(20),
First_date datetime,
Last_update datetime
)
Insert @firstStep EXEC spSelectData
Select * from @firstStep
-- This is the procedure 1
CREATE PROC spTest1
@TTType Task1TableType READONLY
AS
BEGIN
Select * …Run Code Online (Sandbox Code Playgroud) 我有一个简单的脚本.
IF OBJECT_ID('dbo.Customers', 'U') IS NOT NULL
DROP TABLE dbo.Customers;
GO
CREATE TABLE dbo.Customers
(
custid INT NOT NULL,
companyname VARCHAR(125) NOT NULL,
phone VARCHAR(120) NOT NULL,
address VARCHAR(150) NOT NULL
);
INSERT INTO dbo.Customers
(custid, companyname, phone, address)
VALUES (1, 'cust 1', '(111) 111-1111', 'address 1'),
(2, 'cust 2', '(222) 222-2222', 'address 2'),
(3, 'cust 3', '(333) 333-3333', 'address 3'),
(4, 'cust 4', '(444) 444-4444', 'address 4'),
(5, 'cust 5', '(555) 555-5555', 'address 5');
IF OBJECT_ID('dbo.CustomersStage', 'U') IS NOT …Run Code Online (Sandbox Code Playgroud) 问:如何根据1列的变化值对记录进行排名?
我有以下数据(https://pastebin.com/vdTb1JRT):
EmployeeID Date Onleave
ABH12345 2016-01-01 0
ABH12345 2016-01-02 0
ABH12345 2016-01-03 0
ABH12345 2016-01-04 0
ABH12345 2016-01-05 0
ABH12345 2016-01-06 0
ABH12345 2016-01-07 0
ABH12345 2016-01-08 0
ABH12345 2016-01-09 0
ABH12345 2016-01-10 1
ABH12345 2016-01-11 1
ABH12345 2016-01-12 1
ABH12345 2016-01-13 1
ABH12345 2016-01-14 0
ABH12345 2016-01-15 0
ABH12345 2016-01-16 0
ABH12345 2016-01-17 0
Run Code Online (Sandbox Code Playgroud)
我想产生以下结果:
EmployeeID DateValidFrom DateValidTo OnLeave
ABH12345 2016-01-01 2016-01-09 0
ABH12345 2016-01-10 2016-01-13 1
ABH12345 2016-01-14 2016-01-17 0
Run Code Online (Sandbox Code Playgroud)
所以我想我是否可以以某种方式创建一个排名列(如下所示),该列根据Onleave列中的值递增 - 由EmployeeID列分区.
EmployeeID Date …Run Code Online (Sandbox Code Playgroud)