Игорь_Vasinsky
2.10.2013 - 14:03
речь о TSQL (mssql)
Есть динамический sql вида
Псевдокод, чтоб картина понятней была
declare @sql varchar(max)
declare @table varchar(10) = 'mytable'
declare @input bigint = 10
set @sql = 'insert into ' + @table + ' (input) values ('+cast(@input as varchar(5))+')';
exec sp_executesql @sql
Тут cast(@input as varchar(5)) - привёл к строке - т.к. иначе я бы не смог склеить сам запрос
и в данном случае input - внешний ключ - указывающий на другую таблицу, при этом там это поле формата bigint
так как типы данных разные, хотя внешне данные схожи получаю ошибку
Цитата |
The INSERT statement conflicted with the FOREIGN KEY constraint "fk_anytable_input". The conflict occurred in database "db", table "anytable", column 'input'. |
как победить.. понятия не имею..
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
вероятно, все дело в том что в поле, которое является внешним ключем, хочешь записать значение, которого нет в таблице на которую это самое поле ссылается
Игорь_Vasinsky
2.10.2013 - 15:03
есть, я же описал - внешне выглядят одинакого - например 115 - но в одной таблице это bigint, а при вставке в другую varchar - т.е. '115'
дело оказалось в другом месте, выше перепутал тип у другой переменной
и использовал nvarchar для sql (в верхнем коде указал varchar)
а так использовал varchar для @sql и типы приводить не пришлось + выполнял запрос не
exec sp_executesql @sql
а
exec @sql
и усё нормально вроде)
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker