-1

列にロシア語の文字を挿入する必要があります。

次の方法で実行できます。

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

@pNameそうですが、SPでパラメーターとして何かをしなければなりません。

そう、

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

正しい構文ではありません。

コードを使用する方法はありますか、またはオプションにオプションがありますか?

ありがとう。

4

3 に答える 3

3

パラメータタイプにnvarchar(ユニコード文字列)を使用すると、次のようなトリックが実行されます。

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 に答える
-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

ただし、DBに依存関係がある場合は、

ALTER DATABASE TEST COLLATE Cyrillic_General_100_CI_AS

動かない。依存関係を削除してから試す必要があります。

ありがとう。

于 2013-03-03T10:13:54.597 に答える