Unable to Create Multiple User Defined Functions in SQL Server Using System.Data.SqlClient(无法使用 System.Data.SqlClient 在 SQL Server 中创建多个用户定义的函数)
问题描述
我正在尝试从同一个 .sql 文件中创建多个用户定义的函数.我正在使用 SQL Server 并使用 C# 的 System.Data
中的 SqlClient
执行我的查询.
I am trying to create multiple user defined functions from within the same .sql file. I am using SQL Server and am executing my queries using the SqlClient
from C#'s System.Data
.
.sql 文件的内容:
Contents of the .sql file:
CREATE FUNCTION [dbo].[GetUserId] (@username VARCHAR(32))
RETURNS INT
AS
BEGIN
DECLARE @userId INT = -1
SET @userId = (SELECT DISTINCT UserId FROM Users WHERE UserName = @username)
RETURN @userId
END
GO
CREATE FUNCTION [dbo].[GetUserId2] (@username2 VARCHAR(32))
RETURNS INT
AS
BEGIN
DECLARE @userId2 INT = -1
SET @userId2 = (SELECT DISTINCT UserId FROM Users WHERE UserName = @username2)
RETURN @userId2
END
这是我执行语句时抛出的错误:
Here's the error that is thrown when I execute the statement:
System.Data.SqlClient.SqlException: 'GO' 附近的语法不正确.
必须声明标量变量@username2".
'END' 附近的语法不正确.
System.Data.SqlClient.SqlException: 'Incorrect syntax near 'GO'.
Must declare the scalar variable "@username2".
Incorrect syntax near 'END'.'
有什么想法吗?总的来说,我是 SQL 的新手,但这对我来说似乎是缺乏对语法/批处理的理解.
Any ideas? I'm new to SQL in general but this seems to be a lack of understanding syntax/batching to me.
我注意到GO"是 SQL Server Management Studio 的一部分,而不是 SqlClient
.如果我从 .sql 文件中删除GO",则会收到此错误:
It has come to my attention that 'GO' is part of SQL Server Management Studio, and not the SqlClient
. If I remove the 'GO' from my .sql file, then I get this error:
'CREATE FUNCTION' 必须是查询批处理中的第一条语句.
'CREATE FUNCTION' must be the first statement in a query batch.
如何在不使用GO"的情况下分隔 CREATE FUNCTION
语句?
How do I separate CREATE FUNCTION
statements without using 'GO'?
推荐答案
您不能在单个语句中运行多个批处理.
You cannot run multiple batches in a single statement.
我建议您使用 GO 拆分 TSQL 语句,然后逐个执行批处理.
I would suggest you to split your TSQL statement using GO and then execute the batches one by one.
string multipleUDFs = "CREATE FUNCTION... " +
"GO" +
"CREATE FUNCTION ";
List<string> statementsToExecute = multileUDFs.Split("GO").ToList();
// Create the command
var command = new SqlCommand(myConnection);
foreach(string sqlcommand in statementsToExecute)
{
// Change the SQL Command and execute
command.CommandText = sqlcommand;
command.ExecuteNonQuery();
}
这篇关于无法使用 System.Data.SqlClient 在 SQL Server 中创建多个用户定义的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法使用 System.Data.SqlClient 在 SQL Server 中创建多个
基础教程推荐
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01