天道酬勤,学无止境

sql-server

How do I resolve this "Access is denied" error which occurs when using xp_cmdshell in Microsoft SQL?

问题 这是我的整个例程: Declare @AttFileType as char(5), @HQCo as int, @FormName as Varchar(15), @KeyID as VarChar(10), @UniqueID as uniqueidentifier, @FilePath as Varchar(100), @StringCommand as Varchar(200) Declare @AttID as int DECLARE @cmd as VARCHAR(500) DECLARE @cmd2 as VARCHAR(500) CREATE TABLE #tmp(eFileName VARCHAR(100)); INSERT INTO #tmp EXEC xp_cmdshell 'dir /B C:\Users\*****\Desktop\Test_Images'; Declare @FileName varchar(100) Set @UniqueID = NewID() While (Select Count(*) From #tmp where eFileName is not null) > 0 Begin Select Top 1 @FileName = eFileName From #tmp Set @FilePath = 'C:\Users\*

2022-07-11 09:54:59    分类:技术分享    sql   sql-server   xp-cmdshell

SQL Server 2014 Password Won't Change

问题 我最近在我的计算机上设置了 SQL Server 2014 Express。 在安装过程中,我只选择了 Windows 身份验证,假设以后可以创建其他帐户。 我使用集成身份验证使用 C# 测试了几件事。 当我尝试使用帐户时出现了问题。 我使用 Windows 身份验证登录以更改 SQL Server Management Studio 中的sa密码。 但是当我尝试这样做并关闭对话框时,再次打开它,然后密码又回到了我不知道的 15 个字符的默认值。 执行策略未启用,我不知道是什么原因造成的... 回答1 您需要通过以下方式检查是否启用了混合模式身份验证: 以 Windows 用户身份登录后,右键单击服务器名称单击属性点击安全检查是否选择了“SQL Server 和 Windows 身份验证模式”选项。 然后,您可以通过展开 Server 项并转到 Security -> Logins -> 右键单击​​ sa -> 单击 Properties Change the password here 并单击 OK 来更改 sa 的密码。 在输入用户名的位置上方选择 SQL Server 身份验证后,注销,以 sa 身份重新登录。

2022-07-11 09:50:07    分类:技术分享    sql-server

Trigger - is it necessary BEGIN / COMMIT TRAN

问题 我想像这样制作 INSTEAD OF 触发器: CREATE TRIGGER [dbo].[DeleteCompany] ON [dbo].[Company] INSTEAD OF DELETE AS DECLARE @CompanyID int SELECT @CompanyID = deleted.CompanyID FROM deleted BEGIN TRAN DELETE FROM Project WHERE CompanyID = @CompanyID DELETE FROM CompanyPerson WHERE CompanyID = @CompanyID UPDATE PersonCompany SET CompanyID = null WHERE CompanyID = @CompanyID DELETE [Company] FROM DELETED D INNER JOIN [Company] T ON T.CompanyID = D.CompanyID COMMIT TRAN 所以,我可以肯定,这些动作是一种原子动作。 但这有意义还是 TRIGGER 总是在事务内部执行? 此外,如果公司将在另一个 TRIGGER 中被删除,会发生什么情况: CREATE TRIGGER [dbo].[DeleteSecurityLevel] ON [dbo]

2022-07-11 09:41:37    分类:技术分享    sql-server   triggers   azure-sql-database   sql-server-2014

Substring after a space

问题 我想拆分一个字符串并获取空格后的值。 我可以在空格之前获取值,但是如何在空格之后获取字符串。 DECLARE @string varchar(20) SELECT @string = 'Test Name' SELECT SUBSTRING(@string, 0, CHARINDEX(' ', @string)) 编辑:我正在使用 SQLServer 2012 回答1 这是在引入STRING_SPLIT时,在 SQL Server 2016 之前的 SQL SERVER 版本中使用SUBSTRING和CHARINDEX的版本。 以下任一工作: SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, 20) SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1 ) 编辑根据 Rao 的评论添加描述 我们需要使用 CHARINDEX 找到空格的位置(它返回一个数字,表示字符串(空格)开始的位置。但是我们要选择的字符串在空格之后开始,因此我们必须将 1 (+1) 添加到我们的 SUBSTRING 的起始位置,以便起始位置变为 CHARINDEX(' ', @string) + 1。

2022-05-17 05:19:05    分类:技术分享    sql-server   string   sql-server-2012   substring

EntityCommandExecutionException Timeout Expired Only Sometimes

问题 我正在使用 Entity Framework 5 连接到 SQL Server 2008。我已将存储过程导入到我的项目中,没有任何问题。 存储过程在过去执行时完全没有问题,直到我从在 LINQ 中使用.GroupBy().First()切换到通过在存储过程中使用OUTER APPLY来获得独特的结果。 我从 LINQ 中的.GroupBy()切换到在 SQL Server 上使用OUTER APPLY ,因为当然 SQL 要快得多。 这是我的 SQL: @USERID VARCHAR(MAX) = NULL, @ITEMTYPE VARCHAR(MAX) = NULL, @ITEMSUBTYPE VARCHAR(MAX) = NULL, @ITEMGROUP VARCHAR(MAX) = NULL, @ITEMNO VARCHAR(MAX) = NULL SELECT distinct orderformdump.itemno, case when @userid = '' then NULL else CAST((SELECT top 1 [UNITPRICE] FROM [ICPRICP] WHERE [ITEMNO] = ICITEM.ITEMNO AND [PRICELIST] in (select priclist from ARCUS where IDCUST

2022-05-17 04:50:14    分类:技术分享    c#   sql-server   entity-framework   linq

SqlDependency vs SQLCLR call to WebService

问题 我有一个桌面应用程序,应该在任何表格更改时收到通知。 因此,我发现只有两个解决方案非常适合我的情况: SqlDependency和SQLCLR 。 (我想知道 .NET 堆栈中是否有更好的)我已经构建了这两种结构并使它们工作。 我只能比较从 SQL Server 到客户端的 s̲i̲n̲gl̲e̲ 响应的持续时间。 SqlDependency 持续时间:从 100 毫秒到 4 秒 SQLCLR 持续时间:从 10 毫秒到 150 毫秒 我希望这种结构能够处理高频率通知*,我已经阅读了一些 SO 和博客文章(例如:here),并且还从一位同事那里得到警告,在大量请求时 SqlDependency 可能会出错。 在这里,MS 提供了一些我没有得到的东西,这可能是我问题的另一种解决方案。 *:不是所有时间,而是一个季节; 在 1-2 个服务器上每秒 50-200 个请求。 在高通知率和性能并行的基础上,我应该继续使用这两个中的哪一个,或者还有其他选择吗? 回答1 SqlDependency (即查询通知)和 SQLCLR(即通过触发器调用 Web 服务)都不适用于该流量(每秒 50-200 个请求)。 事实上,在这些数量上,这两种选择都非常危险。 在两个链接页面(SoftwareEngineering.StackExchange.com 和 TechNet 文章

2022-05-17 03:02:16    分类:技术分享    sql-server   signalr   sqlclr   sqldependency   database-trigger

Laravel connection MSSqL server works with cli, but not in browser

问题 安装dll's以与 MSSqL 服务器一起使用后,命令php artisan migrate正确运行,并且在db中创建了表。 所以我认为该连接适用于该应用程序。 然后我使用命令php artisan make:auth (不使用数据库连接)来搭建身份验证文件。 现在,当我尝试注册任何人时,我会收到错误: PDO 异常 (1/2) 找不到驱动程序 和 PDOExeption (2/2) 找不到驱动程序(从.....选择计数(*) 现在我尝试查看使用cli命令是否仍然有效,并且php artisan migrate:rollback和php artisan migrate仍然有效。 环境:安装了 xampp 的 Windows 7。 版本:Laravel 5.4,php 7.1 没关系,但这里是我的.env和database.php文件的一部分: `database.php` 'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('DB_HOST', '10.0.0.40'), 'port' => env('DB_PORT', '1433'), 'database' => env('DB_DATABASE', 'sqlcon'), 'username' => env('DB_USERNAME', 'sa'), 'password' =

2022-05-17 03:01:29    分类:技术分享    php   sql-server   driver   laravel-5.4

There is already an object named '#tmptable' in the database

问题 我正在尝试执行存储过程,但我遇到了现有临时表的问题,但我只是创建一个时间并用于另一部分代码 SELECT ... INTO #tmpUnidadesPresupuestadas FROM proce.table1 --Insertar in table src.. INSERT INTO table ( ....) SELECT .... FROM #tmpUnidadesPresupuestadas 我收到这条消息: 数据库中已经有一个名为“#tmpUnidadesPresupuestadas”的对象。 我该如何解决? 问候 回答1 如果不查看更多代码,则无法知道以下情况是否是您的问题,但可能是。 当您有互斥的代码分支,它们都对同一个临时表执行 SELECT...INTO 时,缺陷会导致此错误。 SELECT...INTO to a temp table 创建具有用于填充它的查询结构的表。 解析器假设如果这种情况发生两次,这是一个错误,因为一旦表已经有数据,您就无法重新创建表的结构。 if @Debug=1 select * into #MyTemp from MyTable; else select * into #MyTemp from MyTable; 虽然显然意义不大,但仅此一项就说明了问题。 这两条路径是互斥的,但解析器认为它们可能都被执行,并发出致命错误。

2022-05-16 23:19:04    分类:技术分享    sql   sql-server   stored-procedures

Microsoft SQL Server: Query to see list of all databases, and their corresponding tables, and columns

问题 我发现似乎一次只显示一个数据库(例如,从 information_schema.columns 中选择 *)。 有没有像 select * from sys.databases 这样的东西,它不仅包括所有数据库名称,还包括它们自己的表和列名? 希望查看服务器的所有这些:数据库名称、表名称、列名称。 我正在尝试熟悉一家新公司的服务器,并且只想通过浏览每个数据库中的表名和列来进行探索。 此外,我没有写入权限,并且正在 Tableau 自定义 SQL 中执行此操作。 回答1 EXEC sp_MSforeachdb N' BEGIN use ? select * from information_schema.tables select * from information_schema.columns END'; 回答2 我以前用过的一个: EXEC master.sys.sp_MSForEachDB N' IF ''?'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'') BEGIN USE ? SELECT ''?'' AS theDatabase , OBJECT_SCHEMA_NAME([tables].[object_id],DB_ID()) AS theSchema , [tables].name AS

2022-05-16 22:56:05    分类:技术分享    sql   sql-server

Creating a new column based on another column in SQL Server

问题 快速提问 - 我想在 SQL Server 中创建另一列,例如: 原始表 Type Amount LocNum Chocolate 15 WC-10202-01 Banana 10 WC-35209-22 Vanilla 5 WC-15815-15 理想表 Type Amount LocNum LocNum2 Chocolate 15 WC-10202-01 WC-10202 Banana 10 WC-35209-22 WC-35209 Vanilla 5 WC-15815-15 WC-15815 回答1 如果你真的需要,你可以创建一个计算列。 ALTER TABLE yourTable ADD LocNum2 AS ( <your calculation here> ); 但是,除非您出于某种原因需要为此计算编制索引,否则我建议您将其添加为您的select输出的一部分。 回答2 select [Type], [Amount], LocNum, LocNum2 = replace(LocNum,right(LocNum, charindex('-',LocNum,charindex('-',LocNum,1))),'') from yourtable 回答3 ALTER TABLE table_name ADD column_name column-definition;

2022-05-16 22:43:05    分类:技术分享    sql-server