我正在尝试在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)
当我执行此操作时,我收到两个错误:
是否有可能在表值函数中具有这样的条件?基本上我正在尝试从" 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 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) 希望这是一个非常简单的问题.我试图在不使用表格的情况下实现以下格式化,如第一张图片所示.有没有办法使用span和/或div标签设置文本内容的样式,使其看起来像底部的示例?非常感谢您的见解.
使用表格

期望的样子

更新:
谢谢大家的建议,我不确定在这种情况下是否标准使用表格.
我有以下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.
我有一个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) 我有一个函数,它传递一个字符串传递给它.在测试函数时,我在传递给它的字符串参数上得到一个空引用异常,即使该字符串不为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)