-1

我必须在一列中插入俄语字符。

它可以通过以下方式完成:

insert into tbl_test(name)
values(N'ŞİĞİL')

没错,但我必须在 SP 中做一些@pName参数。

所以,

insert into tbl_test(name)
values(N@pName)

不是正确的语法。

有什么方法可以使用代码或在选项中有选项吗?

谢谢。

4

3 回答 3

3

使用 nvarchar (unicode string) 作为参数类型应该可以解决问题:

create procedure dbo.spAddName
@name nvarchar(100)
as

insert into tbl_test(name) values(@name)

GO

更新

显然,问题似乎出在您的调用代码中,而不是其他人试图帮助解决的存储过程的定义中。

这是一个完整示例,说明如何从 t-sql 和 c# 正确调用上述存储过程。

-- create a test table
create table dbo.tbl_test (
name nvarchar(100) NOT NULL
)
go

-- prove that a simple insert succeeds
insert into dbo.tbl_test (name) values (N'ŞİĞİL')

-- simple select against the unicode column to return the characters verbatim
select name from dbo.tbl_test

-- execute the original stored procedure from t-sql
dbo.spAddName N'ŞİĞİL'

...现在使用 c# 和 ado.net,只是为了提供来自应用程序代码的示例调用。

const string cnStr = @"Server=.;Database=test;Trusted_Connection=Yes;";
using (SqlConnection cn = new SqlConnection(cnStr)) {
    cn.Open();
    using (SqlCommand cmd = new SqlCommand("dbo.spAddName", cn)) {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 100) {
                Value = "ŞİĞİL"
            });
        cmd.ExecuteNonQuery();
    }
    cn.Close();
}

如果您对那些试图提供帮助的人更有礼貌,那么将来您更有可能获得更多帮助。

祝你好运!

于 2013-03-02T15:59:23.517 回答
0

我有同样的问题。这个解决方案对我有用:http ://www.dbafire.com/2015/06/21/convert-varchar-column-to-nvarchar-techniques-and-best-practices/

于 2020-10-13T05:21:53.657 回答
-1

我意识到了问题,必须更改参数值的排序规则。试试那几行,一步一步。

ALTER DATABASE TEST SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE TEST COLLATE Cyrillic_General_100_CI_AS

ALTER DATABASE TEST SET MULTI_USER

但是,如果数据库中有依赖项,

ALTER DATABASE TEST COLLATE Cyrillic_General_100_CI_AS

不管用。您必须删除依赖项,然后尝试。

谢谢。

于 2013-03-03T10:13:54.597 回答