我有一个月的每个交易日的销售预算.因此,对于第1天,预算为300,第2天预算为400,然后月初至今的预算为700.我在查询中收到此错误: Incorrect syntax near 'ROWS'.
select
TradingDate
,Budget
,sum(Budget) over (PARTITION BY TradingDate
order by TradingDate asc
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING),1) AS BudgetMTD
from #4
Run Code Online (Sandbox Code Playgroud) 我已经看到了关于如何在两个不同的SQL服务器上查询两个不同表的所有引用,我理解它是如何实现的.但是,该命令似乎不适用于使用##.创建的临时表.
如果我在一台服务器上编写一个连接,并且它在该服务器上引用一个临时表,在另一台服务器上引用一个临时表,则SQL Server会假定因为##它在命令中,它会自动查看本地服务器tempdb,而不是远程服务器一.我此时也无法使用OPENROWSET,因为该功能已被禁用,我必须获得批准才能重新启用.
所以我的问题是有一种方法可以重新配置这个命令以识别tempdb要查看的内容吗?
SELECT *
FROM (##mytemptable1 Demog
INNER JOIN MyServer.tempdb.dbo.##mytemptable2 PeakInfo ON (Demog.SAMPLE_NO = PeakInfo.SampleNum) AND (Demog.JOB_NO = PeakInfo.JobNum) )
ORDER BY PeakInfo.JobNum, PeakInfo.SampleNum, PeakInfo.Replicate ,PeakInfo.Reinjection ,PeakInfo.PeakNameCustSort
Run Code Online (Sandbox Code Playgroud) 如果我查询sys.dm_database_encryption_keys,它回来用encryption_state的3(加密)percent_complete的0.如果我查询sys.databases,该is_encrypted列的值为0(未加密).这两个似乎对我来说是相互对立的.
数据库是加密的吗? sys.dm_database_encryption_keys这么说,但is_encrypted在sys.databases不同意.
在数据库属性下,该属性Encryption Enabled为false.
我糊涂了.
是否可以在存储过程运行时关闭ms sql server管理工作室,而无需停止存储过程?
我在 C# 中编写了一个简单的用户定义函数,它获取 IP 地址并针对它返回主机名,代码如下:
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString getname(String ipAddress)
{
System.Data.SqlClient.SqlClientPermission pSql = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
pSql.Assert();
System.Security.PermissionSet psql1 = new PermissionSet(System.Security.Permissions.PermissionState.Unrestricted);
psql1.Assert();
System.Net.DnsPermission psql = new DnsPermission(System.Security.Permissions.PermissionState.Unrestricted);
psql.Assert();
System.Security.Permissions.SecurityPermission psql2 = new SecurityPermission(System.Security.Permissions.PermissionState.Unrestricted);
psql2.Assert();
IPHostEntry host = Dns.GetHostEntry(ipAddress);
return new SqlString(host.HostName.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经部署了它但是当我尝试在 sql 中调用这个函数时: select dbo.getname('10.10.10.10')
它返回此错误:
Msg 6522, Level 16, State 2, Line 7
A .NET Framework error occurred during execution of user-defined routine or aggregate "getname":
System.Security.SecurityException: Request for …Run Code Online (Sandbox Code Playgroud) 我有一个大型数据库脚本将同一结构的多个数据库迁移到一个目标数据库.此目标数据库更通用,因此可以存储来自不同源数据库的数据.我使用变量来跟踪当前正在迁移的实体,因此我知道要在目标表中插入什么ID.
此时迁移性能非常糟糕.为了能够更好地分析脚本,我想通过在每次表迁移后放置'go'来拆分脚本,但这会破坏变量.有没有办法声明一个可供整个连接/会话访问的变量?就像temp #table一样?
由于我遇到的一些问题,我正在尝试使用.NET Framework 4中的连接池.使用SQL事件探查器,我可以看到每次从连接池中获取连接时,都会执行存储过程sp_reset_connection.
要摆脱这种重置(我实际上不需要sp_reset_connection).我已经尝试将连接字符串中的连接重置参数设置为false,但这似乎没有任何效果.我在想,也许我误解了Connection reset参数的用途.
我注意到http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx中没有记录Connection reset参数.但它在许多其他地方也有提及,例如http://www.techrepublic.com/article/educate-yourself-about-net-sql-server-connection-string-syntax/6084879.
如果我将Conection Reset标志设置为无效值(例如'hello'),则在打开连接时会出现异常,表明实际使用了连接重置标志.
ADO.NET是否真的关心连接重置标志?
我的代码如下:
static void Main(string[] args)
{
const string connectionString =
"Data Source=(local);Initial Catalog=MyDatabse;User ID=sa;Password=<removed>;Connection Timeout=5;Pooling=true;Min Pool Size=1; Max Pool Size=1; Enlist=false; Connection Reset=false;";
var connections = new List<SqlConnection>();
for (int i = 0; i < 1000000; i++)
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand command = new SqlCommand("SELECT * FROM DatabaseVersion", conn);
command.ExecuteNonQuery();
connections.Add(conn);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下查询。
select cast(dateadd(minute, datediff(minute, TimeIn, TimeOut), 0) as time(0) )
Run Code Online (Sandbox Code Playgroud)
我从两列中得到了格式为小时-分钟-秒的结果。我只想要 min 的格式。所以02:47:00会读167。
我有这个mssql查询:
with RESULT as(select TITLE, URL, ROW_NUMBER() over (order by URL) as SeqValue from WEBSITE
select * from RESULT where SeqValue>=20 and SeqValue<=40
Run Code Online (Sandbox Code Playgroud)
我想知道如果where语句不在那里,这个查询会返回多少记录.我尝试和许多其他方式select count(*) from RESULT尝试,@@ROWCOUNT但没有工作.我需要来自select的TITLE和URL,最后我需要select的总记录.
例如在mysql查询中我有prepareStatement使用SQL_CALC_FOUND_ROWS:
select SQL_CALC_FOUND_ROWS TITLE, URL from WEBSITE limit ?, ?
and after this select i have:
select FOUND_ROWS()
Run Code Online (Sandbox Code Playgroud)
在此示例中,返回值是mysql查询的总记录.总记录与LIMIT相同且没有LIMIT指令.我将数据库从mysql转换为mssql,我有这个问题.请帮我...
我想将图像插入到Image字段中,最好使用一个存储过程来接受图像的路径.在黑客入侵后我想出了这个;
-- functional
DECLARE @parameters nvarchar(max) = '';
DECLARE @sql_string nvarchar(max) =
N'UPDATE MyTable
SET MyImageField = (SELECT BulkColumn
FROM Openrowset(Bulk ''' + @PathToMyImage + ''', Single_Blob) ImageData)
WHERE MyPrimaryKey = ' + CAST(@PrimaryKey AS NVARCHAR(max));
EXECUTE sp_executesql @sql_string, @parameters
Run Code Online (Sandbox Code Playgroud)
我这样做是因为当我尝试时;
--Not functional
INSERT INTO MyTable (MyImageField)
VALUES ((SELECT BulkColumn
FROM Openrowset(Bulk @PathToMyImage, Single_Blob) ImageData));
Run Code Online (Sandbox Code Playgroud)
SQL Server抛出一个错误,抱怨Bulk期望一个字符串.我宁愿不必使用sp_executesql来实现可维护性/可读性,还有更好的方法吗?