我有一个与另一个数据库的连接。我想在另一个具有用户表数据类型参数的数据库上调用一个过程。但是无论我尝试什么,都找不到用户表数据类型。
- 我尝试在 [dbo].[myType] 前面使用数据库名称,但这不是有效的语法。
- 我尝试在当前数据库中创建相同的类型
- 我尝试在模型数据库中创建相同的类型
- 我尝试在 SqlCommand.Text 顶部附加“USE MyOtherDatabase”
一切都失败了(我真的很羞愧“使用......”方法失败了)。
我怎样才能做到这一点?
代码示例:
// While connected to MyOtherDatabase
CREATE TYPE dbo.typeClubMembersVersion AS TABLE (
ID INT
, UNIQUE(ID)
, [version] INT
)
GO
CREATE PROCEDURE dbo.spCheckCMembersMods (
@pVersions AS dbo.typeClubMembersVersion READONLY
, @pWhoID AS BIGINT
)
AS
BEGIN
[...]
END
SqlCommand com = new SqlConnection(functions.ConnectionString).CreateCommand();
com.CommandText = @"
// While connected to CurrentDatabase
USE MyOtherDatabase
DECLARE @tbl AS dbo.typeClubMembersVersion
BEGIN TRANSACTION
UPDATE dbo.tClubMembers
SET
Title = @Title
OUTPUT inserted.ID, deleted.[version] INTO @tbl (ID, [version])
WHERE IdMember = @IdMember
EXEC dbo.spCheckCMembersMods @tbl, @whoID
COMMIT
";
com.Parameters.Add("@Title", SqlDbType.NVarChar, 20).Value = this.Title;
com.Parameters.Add("@IdMember", SqlDbType.BigInt).Value = this.Id;
com.Parameters.Add("@whoID", SqlDbType.BigInt).Value = (object)whoID ?? DBNull.Value;
com.Connection.Open();
try
{
com.ExecuteNonQuery();
}
catch (Exception exe)
{
throw exe;
}
finally
{
com.Connection.Close();
}