我在访问SQL Server中的存储过程时遇到错误
Server Error in '/' Application.
Procedure or function 'ColumnSeek' expects parameter '@template', which was not supplied.
Run Code Online (Sandbox Code Playgroud)
当我通过.net的数据连接调用带有参数的存储过程时(System.data.SqlClient),即使我提供了参数,也会发生这种情况.这是我的代码.
SqlConnection sqlConn = new SqlConnection(connPath);
sqlConn.Open();
//METADATA RETRIEVAL
string sqlCommString = "QCApp.dbo.ColumnSeek";
SqlCommand metaDataComm = new SqlCommand(sqlCommString, sqlConn);
metaDataComm.CommandType = CommandType.StoredProcedure;
SqlParameter sp = metaDataComm.Parameters.Add("@template",SqlDbType.VarChar,50);
sp.Value = Template;
SqlDataReader metadr = metaDataComm.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
我的存储过程是:
USE [QCApp]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ColumnSeek]
@template varchar(50)
AS
EXEC('SELECT Column_Name, Data_Type
FROM [QCApp].[INFORMATION_SCHEMA].[COLUMNS]
WHERE TABLE_NAME = ' …Run Code Online (Sandbox Code Playgroud) 我想简单地将一些信息从简单的客户端发送到日志文件,然后使用创建的标识进行进一步处理.
以下使用SCOPE_IDENTITY()是否正确?
CREATE PROCEDURE [dbo].[LogSearch]
@userName VARCHAR(50),
@dateTimeStart DATETIME
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [WH].[dbo].[tb_Searches]
(
[UserName],
[DateTimeStart]
)
SELECT @userName,
@dateTimeStart;
SELECT SCOPE_IDENTITY() AS ProfileKey;
END;
Run Code Online (Sandbox Code Playgroud)
编辑
我编写了以下代码:
ALTER PROCEDURE [dbo].[LogSearch]
@userName VARCHAR(50),
@dateTimeStart DATETIME
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [WH].[dbo].[tb_Searches]
(
[UserName],[DateTimeStart]
)
VALUES (@userName, @dateTimeStart);
RETURN SCOPE_IDENTITY();
END;
Run Code Online (Sandbox Code Playgroud) 如果该数字超过10条记录,则旧记录清除.这意味着,如果表中存储了15条记录,则要删除5条第一条记录.
例:
"DELETE FROM Table WHERE ID NOT IN (SELECT ??? 10 ID FROM Table)"
Run Code Online (Sandbox Code Playgroud)