列にロシア語の文字を挿入する必要があります。
次の方法で実行できます。
insert into tbl_test(name)
values(N'ŞİĞİL')
@pName
そうですが、SPでパラメーターとして何かをしなければなりません。
そう、
insert into tbl_test(name)
values(N@pName)
正しい構文ではありません。
コードを使用する方法はありますか、またはオプションにオプションがありますか?
ありがとう。
列にロシア語の文字を挿入する必要があります。
次の方法で実行できます。
insert into tbl_test(name)
values(N'ŞİĞİL')
@pName
そうですが、SPでパラメーターとして何かをしなければなりません。
そう、
insert into tbl_test(name)
values(N@pName)
正しい構文ではありません。
コードを使用する方法はありますか、またはオプションにオプションがありますか?
ありがとう。
パラメータタイプに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();
}
将来的には、支援しようとしている人々に対してより礼儀正しくなれば、より多くの支援を受ける可能性が高くなります。
幸運を!
問題に気づきました。パラメトリック値の照合を変更する必要があります。その行を、ステップごとに試してください。
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
動かない。依存関係を削除してから試す必要があります。
ありがとう。