2017-01-04 7 views
0

SQL Serverストアドプロシージャで作業しています。動的SQLを使用して一時テーブルからテーブルに挿入します。エラー:varcharをデータ型数値に変換する算術オーバーフローエラー

これは動作するコードの一部です:DatabaseNameは変数になります

INSERT INTO [MYBASE].dbo.[DatabaseName] 

INSERT INTO [MYBASE].dbo.[DatabaseName] 
    ([Employee No_], [From Date], [To Date], [Description], [Quantity],[First Name], [Last Name]) 
    SELECT 
     EmployeeNo, FromDate, ToDate, Description, Quantity, 
     FirstName, LastName 
    FROM 
     #User_Data 

を今、私はこの部分を変更する必要があります。

私はこれを試してみた:

CREATE TABLE #User_Data 
(
    User_id INTEGER, 
    FirstName VARCHAR(30), 
    LastName VARCHAR(30), 
    EmployeeNo VARCHAR(20), 
    Description VARCHAR(50), 
    FromDate DATETIME, 
    ToDate DATETIME 
) 

INSERT INTO #User_Data 
    SELECT u.fname, u.lname, u.employee_no, ... (this works) 

DECLARE @InsertStatement VARCHAR(MAX) 

SET @InsertStatement = 
    'INSERT INTO [MYBASE].dbo.[' + @DatabaseName + '] 
       ([Employee No_], [From Date], [To Date], [Description], 
       [Quantity], [First Name], [Last Name]) 
      SELECT 
       EmployeeNo, FromDate, ToDate, Description, 
       Quantity, FirstName, LastName 
      FROM 
       #User_Data' 

    EXEC(@InsertStatement) 

が、それは動作しません。これは私が得るエラーです:

Arithmetic overflow error converting varchar to data type numeric.

助けてください。私は引用符で記述することを避けるために同義語でこれを行ってきた

+1

なぜあなたは、カラムとして「データベース」ではなく一つのテーブルよりも、それぞれの「データベース」のために別のテーブルを持っているでしょう名? –

+0

'database'という名前のテーブルがありますか? – LONG

+0

いいえ、「データベース」という名前のテーブルはありません。私の悪い、申し訳ありません。 'DatabaseName'の代わりに、テーブルの実名が入ります。 – Ina

答えて

0

Declare @MyDB as nvarchar(100) = 'myDBName' 

if exists(select * from sys.synonyms where name = N'TableinMyDB') drop synonym [TableinMyDB]; 
exec('CREATE SYNONYM [TableinMyDB] FOR [' + @MyDB + '].dbo.[myTableName];'); 

INSERT INTO [TableinMyDB] 
       (
       [Employee No_] 
       ,[From Date] 
       ,[To Date] 
       ,[Description] 
       ,[Quantity] 
       ,[First Name] 
       ,[Last Name] 
       ) 

     SELECT 
       EmployeeNo 
       ,FromDate 
       ,ToDate 
       ,Description 
       ,Quantity 
       ,FirstName 
       ,LastName 
       FROM #User_Data 
+0

です。しかし、このスレッドは安全ですか? – granadaCoder

+0

私のコードではそうです。私は落として作り直した後に同義語を使うだけです。私はまた、使用後にドロップします。同義語を推測する機会はありません! – cloudsafe

+0

ありがとう、私はこれを試してみるよ。 – Ina

関連する問題