小编kin*_*005的帖子

TSQL存储函数

我正在尝试在SQL Server 2012中编写一个表值函数,它根据输入参数调用另一个表值函数,这是一个例子

CREATE FUNCTION [dbo].[fnMyLastFilterFunction] 
(   
    @Param1 VARCHAR(64),
    @Param2 VARCHAR(64),
    @Param3 INT,
    @StartDate DATETIME,
    @EndDate DATETIME
)
RETURNS TABLE 
AS
RETURN 
(

    IF (@Param3 = 0)
    BEGIN
        SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
        FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
        WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
    END

)
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,我收到两个错误:

  1. 关键字'IF'附近的语法不正确
  2. ')'附近的语法不正确(即最后一个右括号)

是否有可能在表值函数中具有这样的条件?基本上我正在尝试从" fnMyFirstFilterFunction "中的所有数据开始实现过滤系统.因此,"fnMyLastFilterFunction"获取该数据并按@start和@end日期过滤它.我正在使用存储函数来分离过滤器阶段.我的SQL很生疏,所以如果有更好的方法,我会对想法持开放态度.

更新:

SpectralGhost的建议编译得很好,但如果在函数体中我希望逻辑基于@Param3的值调用不同的函数呢?如下:

IF (@Param3 = 0)
    BEGIN
        SELECT t1.Col1, t1.Col2, t1.Col3, t1.Col4
        FROM fnMyFirstFilterFunction(@Param1,@Param2) t1
        WHERE t1.DateTimeEnd BETWEEN @StartDate AND @EndDate
    END
ELSE IF (@Param3 = 1)
    BEGIN …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2012

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

C#中存储过程的返回值返回错误

我试图在SQL Server 2005中检索存储过程的返回值,如下所示:

        OleDbCommand comm = new OleDbCommand(process_name, connection);
        comm.CommandType = CommandType.StoredProcedure;

        for (int i = 0; i < process_parameters.Length; i++)
            comm.Parameters.AddWithValue(process_parameters[i].ParameterName, process_parameters[i].Value);

        //Add output param
        comm.Parameters.Add("@TestID", OleDbType.Integer).Direction = ParameterDirection.ReturnValue;

        comm.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

但是,当调用ExecuteNonQuery()时,我得到一个OleDbException,说:"过程或函数myStoredProcedure指定的参数太多了." 我的存储过程开始如下:

ALTER PROCEDURE [dbo].[spTabtempTestsINSERT]
(
            @Param1     char (64),
            @Param2     char (128),
            @Param3     char (64),
)
AS
BEGIN
    Declare     @TestID         int
Run Code Online (Sandbox Code Playgroud)

并以以下结尾:

    RETURN @TestID
END
Run Code Online (Sandbox Code Playgroud)

声明返回值而不是作为参数传递这一事实是否与它有关?如果是这样,我怎样才能获得存储过程开始后声明的参数的返回值?谢谢你的帮助.

更新:我已经尝试了目前为止建议的更改,我添加了以下行:

            OleDbCommand comm = new OleDbCommand(process_name, connection);
            comm.CommandType = CommandType.StoredProcedure;

            for (int i = 0; i < process_parameters.Length; i++)
                comm.Parameters.AddWithValue(process_parameters[i].ParameterName, …
Run Code Online (Sandbox Code Playgroud)

c# t-sql sql-server sql-server-2005 visual-studio

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

HTML文本格式

希望这是一个非常简单的问题.我试图在不使用表格的情况下实现以下格式化,如第一张图片所示.有没有办法使用span和/或div标签设置文本内容的样式,使其看起来像底部的示例?非常感谢您的见解.

使用表格

表格格式

期望的样子

在此输入图像描述

更新:

谢谢大家的建议,我不确定在这种情况下是否标准使用表格.

html css

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

TSQL Distinct,以及OrderBy和WHERE

我有以下SQL语句示例:

SELECT DISTINCT [CommentNdx]
      ,[CommentsText]
      ,[DateTimeAdded]
  FROM [dbo].[CommentTable]
ORDER BY [dbo].[CommentTable].DateTimeStart DESC
WHERE [CommentsText] = 'Hello World'
Run Code Online (Sandbox Code Playgroud)

我一直收到错误,Incorrect syntax near the keyword 'WHERE'. 我知道语法不正确,但我不确定应该如何格式化.任何帮助表示赞赏.

更新:

我的错误,我的意思是日期时间开始应该是datetimeadded.修正了语法.

SELECT DISTINCT [TestCommentNdx]
      ,[TestID]
      ,[CommentsText]
      ,[DateTimeAdded]
      ,[OperatorNdx]
  FROM [PTDB].[dbo].[TestsComments]
WHERE [TestID] = 1174411854
ORDER BY [PTDB].[dbo].[TestsComments].[DateTimeAdded] DESC
Run Code Online (Sandbox Code Playgroud)

更新2:

非常感谢大家,最后一件事,如果select语句中有连接,它会有所作为吗?我有一个很长的查询连接,当我尝试使用DISTINCT时,我得到了ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

sql t-sql sql-server sql-server-2005

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

重复的AJAX调用web方法之间的延迟

我有一个ASP.Net Web应用程序,在客户端实现了jquery.在while循环中,客户端jquery脚本对服务器端代码中的Web方法进行异步调用.该调用返回jquery用于更新用户的长时间运行的服务器端任务的状态.目标是让jquery重复调用服务器,直到状态完成,一旦完成它就会跳出while循环并通知用户任务已完成.

我的问题是下面的代码在while循环中运行,但我希望在每次调用之间使其延迟或休眠,以防止服务器因状态请求而瘫痪.我尝试在下面的代码中调用setTimeout,但它只适用于初始的ajax调用,每次后续调用都是背靠背进行的.有没有办法有效地延迟每次后续调用服务器?这是实现我所描述的行为的最有效方式吗?理想情况下,我希望每次通话之间延迟2-5秒.

我有以下代码

客户端Jquery:

var alertTimerId;
$('input[name=btnStatus]').click(function () {

    var result  = false;
    //Loop while server reports task complete is true
    while (!result) {
      alertTimerId = setTimeout(function () {
        $.ajax({
          type: "POST",
          url: "Default.aspx/GetStatus",
          data: "{}",
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          async: true,
          success: function (msg) {
            if(msg.d != false)
              result = msg.d;
          },
          error: function (xhr, ajaxOptions, thrownError) {
            alert('AJAX failure');
          }
        });
      }, 2000);


      if (count > 0) {
        count--;
      }
    }


  });
Run Code Online (Sandbox Code Playgroud)

服务器端ASP

[System.Web.Services.WebMethod]
        public static …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net ajax jquery

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

NullReference对非null的值

我有一个函数,它传递一个字符串传递给它.在测试函数时,我在传递给它的字符串参数上得到一个空引用异常,即使该字符串不为null,我也不明白为什么我会收到此错误.我在下面有一个屏幕截图

替代文字

我使用一个虚拟值来验证SelectSingleNode函数中的字符串参数和传递给我的函数的newValue字符串参数,它们都包含值,所以我不明白它为什么抛出空引用异常.为了清楚起见,该函数的目的是将值写回XML文件的节点.

UPDATE

很抱歉没有发布代码

Private Sub setValue(ByVal nodeToMod As String, ByVal newValue As String)
        ''Test writing to xml config file
        Dim dummy As String = "Config/" & nodeToMod
        Dim xmlDoc As New XmlDocument
        Using fs As FileStream = New FileStream(HttpContext.Current.Server.MapPath("~/XML_Config/Config.xml"), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)
            xmlDoc.Load(fs)
            Dim foo As XmlNode = xmlDoc.SelectSingleNode(dummy)
            Console.WriteLine(foo.InnerXml)
            fs.Seek(0, SeekOrigin.Begin)
            fs.SetLength(0)
            xmlDoc.Save(fs)
        End Using
    End Sub
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的XML文件

<?xml version="1.0" encoding="utf-8"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Username>john.doe@email.com</Username>
  <Password>Password1</Password>
  <ProductType>MyProduct</ProductType>
  <DirectoryEntryPath>LDAP://myDomain</DirectoryEntryPath>
  <SMTPDefaultOnly>True</SMTPDefaultOnly>
  <Logo>myLogo.gif</Logo>
</Config>
Run Code Online (Sandbox Code Playgroud)

是的,SlectSingleNode函数没有返回值.我刚刚开始使用XPath,这似乎在我上周使用时起作用.我不确定它为什么现在停止工作了.

UPDATE2:

知道了,愚蠢的错误.我在Node方法中将nodeToMod作为"UserName"而不是"Username"传递

        Set(ByVal value As String) …
Run Code Online (Sandbox Code Playgroud)

xml vb.net asp.net

0
推荐指数
1
解决办法
231
查看次数