Tag: tsql

如何使用Microsoft.SqlServer.Management.SqlParser中的类将T-SQL解析为AST

类Parser只有Parse返回ParseResult的方法,而且我似乎无法对ParseResult做任何事情 。 如何获取我的sql语句的抽象语法树,或者只是从sql解析元数据标记就可以了。

在C#中将DataTable转换为SQL的CREATE TABLE + INSERT脚本

我需要从DataTable生成一个TSQL脚本以及其中的DATA。 它不是一个插入物。 除此之外,我还需要创建表(相同的数据结构) 所以:我有一个填充数据的DataTable。 我想要TSQL脚本创建此DataTable的结构以及SQL SERVER中的数据(CREATE TABLE + INSERT) 提前感谢您特别感谢John Saunders帮我纠正这个问题。

在SQL Server中使用GO关键字

我知道使用GO关键字。 它将多个语句作为整个组发送到sql server,而不是逐个发送每个语句。 我希望我是对的! 但我想知道程序员在实际应用程序中使用它。 就像我们创建一个存储过程,然后它也做同样的事情,它也编译代码并制定执行计划,并将整个组发送到服务器。 那么我们是否需要在数据库对象的编码中指定GO关键字,例如触发器,视图和存储过程?

C# – SQLClient – 最简单的INSERT

我基本上试图找出使用SqlClient命名空间在C#.NET中执行基本插入操作的最简单方法。 我正在使用SqlConnection作为我的数据库链接,我已经成功执行了一些读取,我想知道插入数据的最简单方法。 当我谷歌时,我发现了一些看似相当冗长的方法。

用逗号分隔的类似数组的字符串执行存储过程

可能重复: 使用逗号分隔参数帮助sql搜索查询 我想编写一个存储过程,在表上执行select并需要一个varchar(max)类型的输入变量。 我想发送一堆由输入参数分隔的值,例如 ‘Jack’,’Jane’,’Joe’ 然后获取包含其中一个名称的行。 在SQL中,代码将是 Select * from Personnel where Name in (‘Jack’,’Joe’,’Jane’); 现在我想在我的C#应用​​程序中有一个变量,比如strNames并填充它 string strNames = “‘Jack’,’Joe’,’Jane'”; 并将此变量发送到SP并执行它。 就像是 Select * from Personnel where Name in (”Jack’,’Joe’,’Jane”) — this is wrong 但是, 如何告诉SQL Server运行此命令? 我需要做到这一点,我知道这是可能的,请给我一些线索。

将T-SQL语句解析为标记

你可以在这里看到C#代码语句解析为令牌的好坏。 例如,以下代码: namespace MyNamespace { class MyClass { public void MyFunction(int arg1) { int var1 = arg1; } } } 被解析为: 我想做这样的事情,但用T-SQL语句代替。 例如,如果我有以下T-SQL语句: IIF(COALESCE([Col001], [Col002], [Col003]) > [Col004], [Col005] * [Col006] + ISNULL([Col007], [Col008]), CONCAT(SUBSTRING([Col009], 0, 3), ‘sample text’, [Col010])) 会给我这样的东西: IIF, COALESCE, ISNULL, CONCAT, SUBSTRING – functions [Col001], [Col002], … , [Col010] – columns […]

在数据库中存储和解析布尔表达式

对于我之前的问题,这是一个后续问题, 哪种设计模式适合此工作流程要求? 。 我想知道什么是在数据库中存储布尔表达式的最佳方法,然后在运行时对其进行评估而不需要太多努力。 我有一个要求,即每个月末需要从屏幕上执行一组作业,并且决定是否可以执行作业取决于先前作业的结果。 所以我应该能够在数据库中保存一个像E =(A或B)和(C或D)的表达式(可以是任何复杂的嵌套表达式)。 这意味着如果A或B成功且C或D成功,则E可以运行。 如何在数据库中表示并解析并在以后评估条件? 想这样做(尚未测试) 如果“工作E =(A和B)或(C和D)”。 将其存储为表中的树结构 JobId DependentJobId SuccessJobId FailureJobId EABCECD 0 ED 1 0 EB 1 0 这意味着“如果A成功,请检查B否则检查C”,“如果C成功则检查D”。 进程从最高节点开始,没有“DependentJobId”并在叶节点处停止。 我使用虚拟Job Ids“1”表示成功,使用“0”表示失败。 如果叶节点为零,则允许作业运行。 我不确定如何在T-sql中评估这个问题。 我可能不得不使用递归函数。 要使用的技术:ASP.NET 3.5,C#3.0,SQL Server 2008

将参数作为Xml传递给存储过程

我有一个要求将参数作为Xml传递给我的存储过程。 我在中间层有一个WCF服务,它调用我的数据层,然后将请求转发到适当的存储过程。 设计是WCF服务负责构建Xml以传递到存储库。 我只是想知道是否要控制中间层中Xml中包含的参数,还是使用客户端构建的字典,然后将其转换为中间层的Xml? 目前我已经选择了后者 – 例如: public TestQueryResponseMessage TestQuery(TestQueryRequestMessage message) { var result = Repository.ExecuteQuery(“TestQuery”, ParamsToXml(message.Body.Params)); return new TestQueryResponseMessage { Body = new TestQueryResponse { TopicItems = result; } } } private string ParamsToXml(Dictionary nvc) { //TODO: Refactor StringBuilder sb = new StringBuilder(); sb.Append(“”); foreach (KeyValuePair param in nvc) { sb.Append(“”); sb.Append(“”); sb.Append(param.Value); sb.Append(“”); […]

Linq to Entities多对多选择查询

我对以下查询感到茫然,这是普通T-SQL中的花生。 我们有三个物理表: 乐队(PK = BandId) MusicStyle(PK = MuicStyleId) BandMusicStyle(PK = BandId + MusicStyleId,FK = BandId,MusicStyleId) 现在我要做的是获取一个链接到Band的MusicStyles列表,其中包含一个特定搜索字符串的名称。 带名应该在结果中。 T-SQL将是这样的: SELECT b.Name, m.ID, m.Name, m.Description FROM Band b INNER JOIN BandMusicStyle bm on b.BandId = bm.BandId INNER JOIN MusicStyle m on bm.MusicStyleId = m.MusicStyleId WHERE b.Name like ‘%@searchstring%’ 我如何在Linq To Entities中写这个? PS:由于某些奇怪的原因,StackOverflow不允许搜索字符串’many to many’…

在货币数据库中存储货币价值的最佳方法是什么?

我需要在数据库中存储几个与钱相关的字段,但我不确定在money和decimal之间使用哪种数据类型。